AWS WAF XSS 检查表单字段值中包含"ON"关键字的阻止表单



在表单字段中发布带有"on"或任何以"on"开头的单词作为最后一个单词的表单,从而导致来自 aws waf 的 XSS 块 被此规则阻止 正文在解码为 URL 后包含跨站点脚本威胁 例如,"仅二十个"或"在线"或"检查"XSS块中的所有结果

这些似乎是正常的话,为什么它会被xss阻止?

但是最后有空格,它不会阻塞 例如"仅二十个"或"在线"或"检查"这些作品

只是标记我们昨晚开始使用 WAF,一夜之间有几十个合法请求被阻止。

当然,每个XSS规则在请求正文中都有字符串"on",后跟其他字符。

我想知道它是否试图检测一百个左右的onerroronload和其他 javascript 事件?感觉它本来可以比匹配on后跟"一些东西"更具体......

这里唯一的解决方案似乎是为我们禁用此规则 - 否则它将成为我们误报的持续来源,这使得它毫无价值。

这是AWS 作为AWSManagedRulesCommonRuleSet规则集的一部分提供的"CrossSiteScripting_BODY"WAFv2 规则的已知问题。该规则将阻止任何与on*=*匹配的输入

在具有多个输入的表单中,任何包含"on"的文本都可能以误报触发此规则,例如a=three two one&b=something else

2021 年 9 月,我向 AWS 企业支持部门投诉了这一明显违反的规则,他们回答说"在有疑问时阻止请求比允许恶意请求更好",我强烈反对。支持工程师还建议我可以尝试将触发此规则的输入列入白名单,这对于任何重要的 Web 应用程序都是完全不切实际的。

我相信该规则试图阻止包含onerror=eval(src)等脚本的XSS攻击,请参阅 https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html#waf-bypass-strings-for-xss

我建议从 WAF 中排除所有黑盒跨站点脚本规则,因为它们不适合用途。

您可以尝试升级到 WAFv2,但某些带有字符"on"+"&"的组合仍可能导致误报。导致问题的规则是带有 URL 解码的正文上的 XSS。因此,如果您的表单数据是使用 url 编码提交的,您可能会遇到问题。如果您将表单作为 JSON 数据提交或使用 MIME 多部分/表单数据提交,它应该可以工作。我有 2 个应用程序,一个使用获取 API 的 javascript XHR 提交表单数据,它使用多部分/表单数据,另一个使用 JSON 数据未被阻止。

否则,您必须调整 XSS 规则或将该特定规则设置为计数。我不会发布如何调整,以免有人潜伏在这里并试图变得有趣。

您添加空格的建议也有效,后端可以删除空格或保持原样。有点烦人,但它有效。

最新更新