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

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

提前感谢您的建议.

最佳答案 这是一个很大的问题.没有简单或自动的方法来做到这一点.团队中的每个开发人员都应该了解这一点的基本方面.最佳实践将包括输入验证和输出转义.

此外,如果您处理预期为html标记的输入,您将有其他复杂性. AntiSAMY是一个很好的去处.

这篇文章是一个很好的起点:
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

点赞