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的快捷方式。
详细的可以参考如下链接:
http://cnodejs.org/topic/5533dd6e9138f09b629674fd
https://www.zhuyingda.com/blog/article.html?id=5