csrf(Cross-site request forgery):跨站请求伪造

防止csrf攻击简单思路: 在服务器上生成一个token, web端发起的请求都带上token这个参数, 请求中的token与服务端的token不一致,则抛出错误.

具体建议参考: 

举个例子,用户通过表单发送请求到银行网站,银行网站获取请求参数后对用户账户做出更改。在用户没有退出银行网站情况下,访问了攻击网站,攻击网站中有一段跨域访问的代码,可能自动触发也可能点击提交按钮,访问的url正是银行网站接受表单的url。因为都来自于用户的浏览器端,银行将请求看作是用户发起的,所以对请求进行了处理,造成的结果就是用户的银行账户被攻击网站修改。

解决方法基本上都是增加攻击网站无法获取到的一些表单信息,比如增加图片验证码,可以杜绝csrf攻击,但是除了登陆注册之外,其他的地方都不适合放验证码,因为降低了网站易用性

 

如何使用maven,需要如下配置

pom.xml

<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>4.1.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>4.1.3.RELEASE</version>
</dependency>
</dependencies>

 

 

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
       . antMatchers("/resources/**","/signup","/about").permitAll()1
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login") 2
            .permitAll();        3
     .logout()
        .deleteCookies(cookieNamesToClear) 4

}

1我们指定了任何用户都可以访问的多个网址格式。 具体而言,如果URL以“/ resources /”开头,等于“/ signup”或等于“/ about”,则任何用户都可以访问请求。

2指定登录位置

3我们必须授予所有用户(即未经身份验证的用户)访问我们的登录页面。 formLogin()。permitAll()方法允许所有用户访问与基于表单的登录相关的所有URL。

4允许指定要在注销成功时删除的cookie的名称。 这是显式添加CookieClearingLogoutHandler的快捷方式。

 

 

详细的可以参考如下链接:

https://docs.spring.io/spring-security/site/docs/4.1.3.RELEASE/reference/htmlsingle/#what-is-acegi-security

http://cnodejs.org/topic/5533dd6e9138f09b629674fd

https://www.zhuyingda.com/blog/article.html?id=5