Spring MVC - 有没有办法在不需要每个JSP页面的c:out的情况下清理用户输入?

时间:2013-12-23 19:23:48

标签: spring xss

我正在尝试保护我的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来获取每个输出值?当然,全球环境会更好吗?这里最好的做法是什么?

提前感谢您的建议。

2 个答案:

答案 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。

请参阅以下链接以获取语法

How do I prevent people from doing XSS in Spring MVC?