假设有人在浏览器中输入以下 URL:
http://www.mywebsite.com/<script>alert(1)</script>
该页面也正常显示,并带有警报弹出窗口。我认为这应该会导致 404,但我怎样才能最好地实现呢?
我的 webapp 在 Tomcat 7 服务器上运行。现代浏览器会自动防止这种情况,但旧的浏览器,我在看你的 IE6,不会。
听起来您实际上正在获得一个 404 页面,但该页面包含资源(在本例中为一段 JavaScript 代码)并且没有将 < 和 > 任何转换为它们各自的 HTML 实体。我在几个网站上看到过这种情况。
解决方案是创建一个自定义 404 页面,该页面不会将资源回显到页面,或者事先进行适当的 HTML 实体转换。您可以通过 Google 找到很多教程,这些教程应该可以帮助您做到这一点。
这是我所做的:
创建了一个高级 servlet 过滤器,它使用 OWASP 的 HTML sanitizer 来检查不可靠的字符。如果有的话,我会重定向到我们的 404 页面。
你应该在你的 webapp 中放置一个过滤器来防止 XSS 攻击。
从 HttpServletRequest 对象中获取所有参数,并将任何参数替换为过滤器代码中以空格开头的值。
这样任何有害的 JS 脚本都不会到达您的服务器端组件。