基于特征检测的策略
- 实时匹配检测:当有 HTTP 请求或响应数据经过 WAF 时,它会实时将数据与特征库中的内容进行匹配。如果发现数据中存在与已知 XSS 攻击特征相匹配的字符串或模式,WAF 会立即拦截该请求或对响应进行修正,防止恶意脚本被执行。例如,若用户在搜索框中输入包含恶意脚本的关键词,WAF 检测到关键词中的恶意特征,就会阻止该请求进一步到达服务器
输入验证与过滤策略
- 特殊字符过滤:对可能用于构造 XSS 攻击的特殊字符进行过滤或转义。如 “<”“>”“&”“’”“”” 等字符,在反射型和存储型 XSS 中,将这些字符转换为对应的 HTML 实体编码,使其无法在浏览器中被解析为脚本标签或其他危险的 HTML 元素。对于 DOM 型 XSS,在将数据插入到 DOM 节点之前,同样对这些特殊字符进行处理,防止攻击者通过修改 DOM 结构来执行恶意脚本
输出编码策略
- JavaScript 编码:如果数据要作为 JavaScript 的值或脚本的一部分输出到页面中,进行 JavaScript 编码。对特殊字符进行转义,确保其在 JavaScript 环境中不会被错误地解析为可执行的代码。比如将双引号 “”” 转义为 “\”””,单引号 “’” 转义为 “\”’” 等,从而避免 DOM 型 XSS 攻击中攻击者通过构造恶意的 JavaScript 代码来修改 DOM 结构和执行恶意操作
白名单与黑名单策略
- URL 黑名单:将已知的恶意 URL 或包含恶意关键词的 URL 加入黑名单。例如,对于一些经常被用于传播 XSS 攻击的钓鱼网站 URL,或者包含特定 XSS 攻击 payload 的 URL 模式,WAF 会阻止用户访问这些 URL,从而防止反射型 XSS 攻击的发生。同时,对于存储型 XSS,也可以防止用户在访问包含恶意脚本的页面时受到攻击
- 内容类型白名单:限制可接受的内容类型,只允许合法的内容类型进入应用程序,如 “text/html”“application/json” 等常见的安全内容类型。对于其他可能包含恶意脚本的内容类型,如 “text/javascript” 等,如果不是应用程序明确需要的,则进行拦截,防止攻击者通过上传恶意脚本文件等方式进行 XSS 攻击
行为分析与异常检测策略
- 异常字符分布检测:分析请求和响应数据中字符的分布情况。如果数据中出现大量的特殊字符、非预期的字符组合或罕见的字符编码,可能是 XSS 攻击的迹象。例如,在正常的用户输入中,很少会出现大量连续的特殊字符,但在 XSS 攻击中,攻击者可能会使用特殊字符来构造恶意脚本,WAF 通过检测到这种异常的字符分布,会将该请求标记为可疑并进行进一步的分析和拦截
- 页面跳转异常检测:对于 DOM 型 XSS 攻击,攻击者可能会通过修改页面的 DOM 结构来实现恶意的页面跳转。WAF 可以监测页面跳转的行为,若发现某个页面在短时间内频繁地进行异常的跳转,或者跳转到与正常业务逻辑不符的页面,就会触发警报并进行拦截,防止用户被诱导到恶意网站
与其他安全机制协同策略
- 与 CSP 协同:Content-Security-Policy(CSP)是一种浏览器端的安全机制,用于限制页面可以加载的资源来源。WAF 可以与 CSP 协同工作,确保服务器发送的响应头中包含正确的 CSP 策略,限制脚本只能从可信的源加载和执行,从而防止攻击者注入的恶意脚本被执行。例如,WAF 可以在检测到 XSS 攻击尝试时,动态地调整 CSP 策略,增加防护的强度
- 与代码审计协同:WAF 的防护效果有限,不能完全替代代码审计。与代码审计工具和流程协同,定期对应用程序的代码进行全面的安全审计,查找可能存在的 XSS 漏洞。对于代码审计中发现的漏洞,及时进行修复,并将相关的特征和修复方法反馈给 WAF,更新其防护规则,提高对 XSS 攻击的防御能力