多类型的 XSS 攻击下 WAF 的应对策略有哪些

基于特征检测的策略

  • 特征库更新:WAF 维护一个包含已知 XSS 攻击特征的数据库,如常见的恶意脚本关键词、特定的攻击模式等。对于反射型 XSS,像 “<script>”“alert (” 等典型的 JavaScript 标签和函数,以及可能用于构造恶意 URL 的特殊字符组合,如 “%3Cscript%3E”(URL 编码后的<script>)等都会被收录。对于存储型 XSS,关注可能用于在评论、留言等输入框中注入恶意脚本的模式。对于 DOM 型 XSS,留意如 “document.write”“innerHTML” 等可导致 DOM 操作并执行脚本的函数特征。定期更新特征库,以确保能够识别新出现的攻击特征

 

  • 实时匹配检测:当有 HTTP 请求或响应数据经过 WAF 时,它会实时将数据与特征库中的内容进行匹配。如果发现数据中存在与已知 XSS 攻击特征相匹配的字符串或模式,WAF 会立即拦截该请求或对响应进行修正,防止恶意脚本被执行。例如,若用户在搜索框中输入包含恶意脚本的关键词,WAF 检测到关键词中的恶意特征,就会阻止该请求进一步到达服务器

 

输入验证与过滤策略

  • 严格的数据格式验证:对所有用户输入的数据进行严格的格式验证,确保其符合预期的类型和范围。例如,对于数字类型的输入,只允许输入合法的数字字符;对于日期类型的输入,验证其是否符合日期格式的规范。在反射型 XSS 中,若攻击者试图在搜索框等输入框中注入恶意脚本,严格的格式验证可直接拒绝不符合格式要求的输入

 

  • 特殊字符过滤:对可能用于构造 XSS 攻击的特殊字符进行过滤或转义。如 “<”“>”“&”“’”“”” 等字符,在反射型和存储型 XSS 中,将这些字符转换为对应的 HTML 实体编码,使其无法在浏览器中被解析为脚本标签或其他危险的 HTML 元素。对于 DOM 型 XSS,在将数据插入到 DOM 节点之前,同样对这些特殊字符进行处理,防止攻击者通过修改 DOM 结构来执行恶意脚本

 

输出编码策略

  • HTML 编码:当服务器将数据输出到 HTML 页面时,WAF 确保对所有不可信的数据进行 HTML 编码。将特殊字符转换为对应的 HTML 实体,如 “<” 转换为 “<”,“>” 转换为 “>” 等。这样即使攻击者注入了恶意脚本,在浏览器中也只会将其作为普通文本显示,而不会被执行。对于反射型 XSS,可防止服务器将包含恶意脚本的请求反射到页面中并被执行;对于存储型 XSS,防止从服务器数据库中取出的恶意脚本在页面加载时被执行

 

  • JavaScript 编码:如果数据要作为 JavaScript 的值或脚本的一部分输出到页面中,进行 JavaScript 编码。对特殊字符进行转义,确保其在 JavaScript 环境中不会被错误地解析为可执行的代码。比如将双引号 “”” 转义为 “\”””,单引号 “’” 转义为 “\”’” 等,从而避免 DOM 型 XSS 攻击中攻击者通过构造恶意的 JavaScript 代码来修改 DOM 结构和执行恶意操作

 

白名单与黑名单策略

  • IP 白名单:配置 WAF 只允许来自信任的 IP 地址或 IP 地址段的请求访问应用程序。对于一些已知的内部网络、合法的合作伙伴或经过认证的用户 IP,可以将其加入白名单。这样可以有效防止来自外部未知来源的 XSS 攻击,特别是在反射型 XSS 中,攻击者通常会从不同的 IP 地址发起攻击,通过 IP 白名单可以直接拒绝这些可疑的请求

 

  • URL 黑名单:将已知的恶意 URL 或包含恶意关键词的 URL 加入黑名单。例如,对于一些经常被用于传播 XSS 攻击的钓鱼网站 URL,或者包含特定 XSS 攻击 payload 的 URL 模式,WAF 会阻止用户访问这些 URL,从而防止反射型 XSS 攻击的发生。同时,对于存储型 XSS,也可以防止用户在访问包含恶意脚本的页面时受到攻击
  • 内容类型白名单:限制可接受的内容类型,只允许合法的内容类型进入应用程序,如 “text/html”“application/json” 等常见的安全内容类型。对于其他可能包含恶意脚本的内容类型,如 “text/javascript” 等,如果不是应用程序明确需要的,则进行拦截,防止攻击者通过上传恶意脚本文件等方式进行 XSS 攻击

 

行为分析与异常检测策略

  • 异常请求频率检测:WAF 会监测每个客户端的请求频率,如果某个 IP 地址或用户在短时间内发起大量的请求,且这些请求具有相似的特征或模式,可能表明存在自动化的 XSS 攻击尝试。例如,攻击者使用脚本工具在短时间内对多个页面的输入框注入不同的恶意脚本,WAF 通过检测到这种异常的请求频率,会对该 IP 地址或用户进行临时限制或进一步的检查

 

  • 异常字符分布检测:分析请求和响应数据中字符的分布情况。如果数据中出现大量的特殊字符、非预期的字符组合或罕见的字符编码,可能是 XSS 攻击的迹象。例如,在正常的用户输入中,很少会出现大量连续的特殊字符,但在 XSS 攻击中,攻击者可能会使用特殊字符来构造恶意脚本,WAF 通过检测到这种异常的字符分布,会将该请求标记为可疑并进行进一步的分析和拦截
  • 页面跳转异常检测:对于 DOM 型 XSS 攻击,攻击者可能会通过修改页面的 DOM 结构来实现恶意的页面跳转。WAF 可以监测页面跳转的行为,若发现某个页面在短时间内频繁地进行异常的跳转,或者跳转到与正常业务逻辑不符的页面,就会触发警报并进行拦截,防止用户被诱导到恶意网站

 

与其他安全机制协同策略

  • 与输入框限制协同:与前端对输入框的限制措施相结合。例如,前端可以限制输入框的字符长度、输入类型等,WAF 在后端进一步对输入数据进行验证和过滤,形成双重防护。这样即使前端的限制被绕过,WAF 仍然可以阻止恶意脚本进入应用程序

 

  • 与 CSP 协同:Content-Security-Policy(CSP)是一种浏览器端的安全机制,用于限制页面可以加载的资源来源。WAF 可以与 CSP 协同工作,确保服务器发送的响应头中包含正确的 CSP 策略,限制脚本只能从可信的源加载和执行,从而防止攻击者注入的恶意脚本被执行。例如,WAF 可以在检测到 XSS 攻击尝试时,动态地调整 CSP 策略,增加防护的强度
  • 与代码审计协同:WAF 的防护效果有限,不能完全替代代码审计。与代码审计工具和流程协同,定期对应用程序的代码进行全面的安全审计,查找可能存在的 XSS 漏洞。对于代码审计中发现的漏洞,及时进行修复,并将相关的特征和修复方法反馈给 WAF,更新其防护规则,提高对 XSS 攻击的防御能力