我正在尝试保护我的Spring MVC Web应用程序免受跨站点脚本(XSS)攻击。
起初我以为我可以在web.xml中设置defaultHtmlEscape并完成。但我发现没有效果。如此处所述 - Spring or App-Server escape html isn't working JAVA MVC,defaultHtmlEscape对INPUTS没有影响。它只清理c:out标签中的OUTPUTS。
然后我想我会编写一个过滤器来拦截请求,检查参数,并根据需要对它们进行清理。但在研究如何编写过滤器时,我遇到了这个 - XSS Filter to enctype="multipart/form-data" forms。它包括一些评论,表明过滤输入是一个坏主意,我应该坚持过滤输出。
有几个帖子提到了HDIV和其他第三方安全解决方案,但我宁愿不为我的项目引入一个新的第三方依赖项,以实现基本的清理。
但过滤输出似乎不方便且容易出错。是否所有触摸我的Web应用程序的开发人员都记得在每个JSP页面上使用c:out来获取每个输出值?当然,全球环境会更好吗?这里最好的做法是什么?
提前感谢您的建议。
答案 0 :(得分:2)
这是一个很大的问题。没有简单或自动的方法来做到这一点。团队中的每个开发人员都应该了解这一点的基本方面。最佳实践将包括输入验证和输出转义。
此外,如果您处理预期为html标记的输入,您将有其他复杂性。 AntiSAMY是一个很好的选择。
这篇文章是一个很好的起点: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
答案 1 :(得分:0)
没有办法让Spring MVC清理用户输入。
但是,您可以通过在web.xml
中将defaultHtmlEscape设置为true来阻止XSS添加它不会清理它将对其进行编码的数据,从而阻止了XSS。
请参阅以下链接以获取语法