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

AWS WAF XSS check blocking form with "ON" keyword in form field value

发布带有“on”的表单或任何以 "on" 开头的单词作为表单字段中的最后一个单词,导致来自 aws waf 的 XSS 块 被这条规则屏蔽 正文解码为 URL 后包含跨站点脚本威胁 例如"twenty only" 或“在线”或 "check on" 所有结果都在 XSS 块中

这些看起来很正常的词,为什么会被xss屏蔽?

但末尾有空格不会阻塞 例如"twenty only "或“在线”或"check on "这些作品

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

否则,您必须调整您的 XSS 规则或设置该特定规则以进行计数。我不会post怎么调免得有人潜伏在这里搞笑

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

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

果然,每个 XSS 规则在请求正文中都有字符串“on”,后面跟着其他字符。

我想知道它是否试图检测一百多个 onerroronload 和其他 javascript 事件?感觉它可能比匹配 on 后跟“一些东西”...

要具体得多

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

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

的输入

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

2021 年 9 月,我向 AWS Enterprise Support 投诉了这个明显违反的规则,他们回答说“最好在有疑问时阻止请求,而不是允许恶意请求”,我强烈反对。支持工程师还建议我可以尝试将触发此规则的输入列入白名单,这对于任何 non-trivial 网络应用程序来说都是完全不切实际的。

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

我建议从您的 WAF 中排除所有黑盒 CrossSiteScripting 规则,因为它们不符合目的。