在我的spring 3.2.8应用程序中防止csrf

时间:2017-05-02 12:52:28

标签: java spring spring-mvc csrf csrf-protection

我希望Spring Security保护我的应用程序免受CSRF攻击: (跨站点请求伪造(CSRF)是一种攻击,迫使最终用户在他们当前正在进行身份验证的Web应用程序上执行不需要的操作.CSRF攻击专门针对状态更改请求,而不是数据被盗,因为攻击者无法看到对伪造请求的响应) 所以我在我的pom.xml中添加了这个

  <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>4.0.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>

但是当我在applicationContext.xml中添加这段代码时:

<security:global-method-security secured-annotations="enabled" />

        <security:http auto-config="true">
            <security:csrf/>     
            <security:intercept-url pattern="/**" access="permitAll"    />
        </security:http> 

        <security:authentication-manager/>         

和我的JSP上的这段代码:

<form:form...
   <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form:form>

但是检查生成HTML的源代码是结果(?!?)

<input type="hidden" name="" value="" />

1 个答案:

答案 0 :(得分:0)

试试这个,

您可以使用spring seurity标记库以获得更好的清晰度和易用性: 首先包括标签lib。

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

然后进入你的......

<sec:csrfInput/>

而不是

 <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />

它应该有用。

如果我错过了什么,请告诉我,是的

Happy Codings !!!!!!!!!!