Spring defaultHtmlEscape并不能防止xss攻击

时间:2015-08-17 14:05:55

标签: spring xss

我想在我的spring应用程序中阻止xss攻击。

我添加了

 <context-param>
        <param-name>defaultHtmlEscape</param-name>
        <param-value>true</param-value>
  </context-param>

进入我的web.xml(我发现了这个soulution here

但是在我的页面上,我保存了名为<script>alert(1);</script>的内容,并且这些脚本在页面刷新后执行。

客户端代码:

$.ajax({
       type: 'POST',
       url: 'setContentName',
       dataType: 'json',
       data: {contentId: id, name: params.value}
});

我错了什么?

P.S。

我在刷新后使用javascript加载内容

2 个答案:

答案 0 :(得分:2)

我的观点有点争议,但我认为你应该验证并拒绝入站XSS。你也应该在输出上转义它,但它不应该在你的数据库中,因为dbs是持久的并且通常是交叉应用。

请参阅https://www.owasp.org/index.php/OWASP_JSON_Sanitizer

使用Hibernate Validator(您不需要使用Hibernate ORM)和JSoup来避免数据库中的XSS:

Foo.java

@Entity
class Foo {

  @SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
  private String name;

  ...
}

FooController.java

@Controller
public class FooController {

  @RequestMapping(method=POST)
  String submit(@Validated Foo foo) {
     ...
  }

}

pom.xml

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.1.2.Final</version>
    </dependency>

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.8.1</version>
    </dependency>

有关更多反XSS措施,请参阅Adding additonal Security to Website

答案 1 :(得分:-1)

我将JSTL用于此目的。在jsp页面中包含c前缀

{% javascripts 'public/js/app.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %}

对于您要显示的值

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

在此方案中,设置属性<c:out value=${someVar} escapeXml="true" />是可选的,因为其默认值为true

Oracle Documentation