首页 > 解决方案 > Apache 重写 XSS 保护问题

问题描述

我们正在为一家货运公司开发一个网站,它最近接受了渗透测试。其中一项攻击是将 XSS 脚本注入请求 url:

ourcompanyhostname.com/abc/authorize<script>alert('xss');</script>

由于我们的网络服务器是 Apache,我们已经通过设置 ff. 在 httpd.conf 文件中。基本上,而不是反映 404 响应错误中的脚本,而是抛出一个通用的 400 响应。

RewriteRule ^/abc/authorize/.*[^A-Za-z0-9./\-_]+ "-" [L,R=400]

问题是当攻击更改为以下攻击时,它不再可以被捕获:

ourcompanyhostname.com/abc/authorize%3c%3cSCRIPT%3ealert(%22XSS%22)%3b%2f%2f%3c%3c%2fSCRIPT%3e

响应仍然是 404 而不是 400。

有没有其他方法可以实现我们想要的?我们已经尝试过执行以下操作,但仍然无法正常工作。我们只希望它在 XSS 攻击完成时返回一个 http 400 错误。

RewriteCond %{REQUEST_URI} ^.*(\*|;|<|>|\)|%0A|%0D|%3C|%3E|%00).* [NC]
RewriteCond %{REQUEST_URI} abc
RewriteRule ^(.*)$ "-" [L,R=400]

标签: apachetomcatxsspenetration-testingibmhttpserver

解决方案


我认为编码无关紧要,mod_rewrite 在解码后会看到 URL 中的路径。

我认为您可能已经错过了您的原始规则需要在“授权”之后匹配尾部斜杠,而新的恶意请求没有它。

您的最终规则对我来说很好,如果您对特定 URL 获得意外结果,则必须研究 rewritelog/logelvel trace8 输出。

如果 404 是由 Apache 生成的,只需为 404 使用自定义的 ErrorDocument。如果它是由您的 EE 服务器生成的,请在您的 web.xml 中执行相同的操作。


推荐阅读