SpringMVC-有没有一种方法可以在每个JSP页面上不需要c:out就清理用户输入?

SpringMVC-有没有一种方法可以在每个JSP页面上不需要c:out就清理用户输入?,spring,xss,Spring,Xss,我正试图保护我的Spring MVC web应用程序免受跨站点脚本(XSS)攻击 起初我以为我可以在web.xml中简单地设置defaultHtmlEscape,然后就可以完成了。但我发现那没有效果。正如这里所解释的--,defaultHtmlEscape对输入没有影响。它只清理c:out标记内的输出 因此,我想我应该编写一个过滤器来拦截请求,检查参数,并根据需要对其进行清理。但是在研究如何编写过滤器时,我遇到了这个--。它包括一些评论,建议过滤输入是个坏主意,我应该坚持过滤输出 有几篇文章提到

我正试图保护我的Spring MVC web应用程序免受跨站点脚本(XSS)攻击

起初我以为我可以在web.xml中简单地设置defaultHtmlEscape,然后就可以完成了。但我发现那没有效果。正如这里所解释的--,defaultHtmlEscape对输入没有影响。它只清理c:out标记内的输出

因此,我想我应该编写一个过滤器来拦截请求,检查参数,并根据需要对其进行清理。但是在研究如何编写过滤器时,我遇到了这个--。它包括一些评论,建议过滤输入是个坏主意,我应该坚持过滤输出

有几篇文章提到了HDIV和其他第三方安全解决方案,但我不想在我的项目中引入一个新的第三方依赖性,因为它是像消毒这样的基础

但过滤输出似乎不方便且容易出错。是否所有接触我的web应用程序的开发人员都应该记住在每个JSP页面上的每个输出值都使用c:out?全球环境肯定会更好?这里的最佳实践是什么


提前谢谢你的建议。

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

此外,如果您处理的输入预期是html标记,则会有额外的复杂性。反艾米是一个很好的去处

本文是一个很好的起点:

不,在Spring MVC中,没有办法清理用户输入

但是,您可以通过在web.xml中将defaultHtmlEscape设置为true来防止XSS

添加此选项不会清理数据,但会对其进行编码,从而防止XSS

有关语法,请参阅下面的链接


您还可以选择在将输出作为属性添加到模型之前对其进行清理。每个有经验的依赖者都知道他必须转义字符串(当他们切换其上下文/元数据字符时)。Ehen在jsp中切换到HTML的最简单、最常见的方式是usw c:out。因此,嵌套实践是使用c:out