【问题标题】:Spring MVC Validating all parameters in POST/PUT methods in controllersSpring MVC验证控制器中POST / PUT方法中的所有参数
【发布时间】:2021-03-02 13:03:32
【问题描述】:

我有很多控制器,我想验证表单中提交的所有参数以防止 XSS 攻击。而不是分别保护每个控制器,我希望有一个组件作为所有提交表单的拦截器并检查提交的参数。

我写了一个过滤器,它使用 antisamy 来校正参数值,但效果太好了。我的意思是它逃避了一切,甚至是不应该逃避的丰富内容。 Sanitizing user inputs with Spring MVC framework https://jeevanpatil.wordpress.com/2011/07/22/prevention_of_xss/

因此,我需要一些解决方案来逃避控制器中的具体参数,你知道任何解决方案吗?我计划在控制器中每个方法的参数旁边创建注释,例如@XSSEscaped,然后只有那些参数会被转义。

【问题讨论】:

    标签: java spring model-view-controller xss


    【解决方案1】:

    输入时的 HTML 编码可能会损坏数据。它可能仍然不安全,因为即使使用 HTML 编码,插入到属性、样式表或脚本中的数据仍然可以执行代码。它可能不会覆盖页面上的所有数据,因为某些值可能没有通过控制器,或者可能已经被修改。

    有很多方法可以绕过输入过滤器(请参阅XSS Filter evasion cheatsheet)。例如,链接答案中的RequestWrapper 会过滤掉eval(),而是传入e<script></script>val(),然后您会再次获得eval() 作为输出。修复它,然后它们就会变成别的东西。

    HTML 编码是视图层的职责。在这里,您可以确保页面上使用的所有数据都针对使用它的上下文进行了适当的编码。遵循Cross Site Scripting Prevention Cheatsheet 的规则可以防止 XSS。像 Thymeleaf 这样的模板系统将默认对其值进行 HTML 编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多