一、最低等级(无任何防御)
攻击方流程:
1. 攻击者找到目标网站的输入点,比如评论区、搜索框、用户资料填写处等。
2. 构造恶意脚本,例如 <script>alert('XSS');</script> 。
3. 将恶意脚本输入到目标网站的输入点。
4. 若网站没有任何过滤和检查,恶意脚本将被存储在服务器或直接在客户端显示。
5. 当其他用户访问包含恶意脚本的页面时,恶意脚本在用户浏览器中执行,可能窃取用户的敏感信息(如登录凭证、个人资料等)或进行其他恶意操作。
二、添加简单防御
防御方措施:
1. 对用户输入进行 HTML 编码:将特殊字符(如 < 、 > 、 & 等)转换为对应的 HTML 实体,例如 < 转换为 < , > 转换为 > 。这样可以防止恶意脚本被直接解释为 HTML 代码。
攻击方绕过流程:
1. 使用 HTML 实体编码绕过:攻击者了解到网站的防御机制后,可能使用双重 HTML 编码来绕过。例如,先将 <script> 编码为 <script> ,然后再次编码为 &lt;script&gt; 。当服务器解码一次后,仍然会得到恶意脚本。
三、加强防御
防御方措施:
1. 输入验证:除了 HTML 编码外,还对用户输入进行严格的验证,只允许特定的字符集和格式的输入。例如,在评论区只允许字母、数字和一些常见的标点符号。
2. 输出过滤:在将用户输入显示到页面之前,进行二次过滤,确保没有任何恶意脚本能够被执行。
攻击方绕过流程:
1. 使用事件属性绕过:攻击者可能尝试使用 HTML 元素的事件属性来执行恶意脚本,例如 <img src="#" οnerrοr="alert('XSS');"> 。当图片加载失败时,触发 onerror 事件执行恶意脚本。
四、进一步加强防御
防御方措施:
1. 内容安全策略(CSP):通过设置 CSP 头,限制页面可以加载的资源来源,禁止执行内联脚本和来自不可信来源的脚本。
2. 定期安全审计:对网站进行定期的安全审计,及时发现和修复潜在的 XSS 漏洞。
攻击方绕过难度增加:
随着防御措施的不断加强,攻击方绕过的难度越来越大。但攻击手段也在不断演变,所以防御方需要持续关注安全动态,不断改进和完善防御措施。