Spring Security4 CSRF 如何关闭CSRF功能

来源:互联网 发布:少儿趣味编程课程 编辑:程序博客网 时间:2024/06/11 08:36

什么是CSRF?

csrf又称跨域请求伪造,攻击方通过伪造用户请求访问受信任站点。CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI……而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。
举个例子,用户通过表单发送请求到银行网站,银行网站获取请求参数后对用户账户做出更改。在用户没有退出银行网站情况下,访问了攻击网站,攻击网站中有一段跨域访问的代码,可能自动触发也可能点击提交按钮,访问的url正是银行网站接受表单的url。因为都来自于用户的浏览器端,银行将请求看作是用户发起的,所以对请求进行了处理,造成的结果就是用户的银行账户被攻击网站修改。
解决方法基本上都是增加攻击网站无法获取到的一些表单信息,比如增加图片验证码,可以杜绝csrf攻击,但是除了登陆注册之外,其他的地方都不适合放验证码,因为降低了网站易用性

CSRF导致的接口访问问题


Could not verify the provided CSRF token because your session was not found in spring security

问题表现:
在开发人员使用Postman调试接口时,已经通过继承WebSecurityConfigurerAdapter过滤了Rest接口拦截的机制,但出现403错误并且提示信息为“Could not verify the provided CSRF token because your session was not found in spring security”。

解决方法:

/** * Web安全配置 */@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http                // 关闭csrf保护功能(跨域访问)                .csrf().disable()                .authorizeRequests()                .antMatchers("/api/**").permitAll();//访问API下无需登录认证权限    }}
原创粉丝点击