美文网首页
SpringSecurity实现CSRF跨站攻击防御

SpringSecurity实现CSRF跨站攻击防御

作者: John_Phil | 来源:发表于2020-05-27 17:10 被阅读0次

一、什么是CSRF
CORS(跨站资源共享)是局部打破同源策略的限制,使在一定规则下HTTP请求可以突破浏览器限制,实现跨站访问。
CSRF是一种网络攻击方式,也可以说是一种安全漏洞,这种安全漏洞在web开发中广泛存在。
当我们使用Spring Security的时候,这种CSRF漏洞默认的被防御掉了。但是你会发现在跨域请求的情况下,我们的POST、DELETE、PUT等HTTP请求方式失效了。我们使用http.csrf.disable()暂时关闭掉了CSRF的防御功能,但是这样是不安全的,那么怎么样才是正确的做法呢?

二、CSRF的攻击方式
通常的CSRF攻击方式如下:

你登录了网站A,攻击者向你的网站A账户发送留言、伪造嵌入页面,带有危险操作链接。
当你在登录状态下点击了攻击者的连接,因此该链接对你网站A的账户进行了操作。
这个操作是你在网站A中主动发出的,并且也是针对网站A的HTTP链接请求,同源策略无法限制该请求。
三、如何防御CSRF攻击
为系统中的每一个连接请求加上一个token,这个token是随机的,服务端对该token进行验证。破坏者在留言或者伪造嵌入页面的时候,无法预先判断CSRF token的值是什么,所以当服务端校验CSRF token的时候也就无法通过。所以这种方法在一定程度上是靠谱的。
但是如果你的电脑中毒,网络信息被劫持使用token的方法仍然不安全。所以没有绝对的安全,道高一次魔高一丈。作为开发者,我们就做到我们应该做到的。
跳转提示:当用户不小心点击了第三方连接,合格的应用应该提示用户相关的风险!由用户自己确认是否真的要跳转或者执行第三方连接,或者就干脆不让非可信连接在留言区等地方存在。
四、Spring Security的CSRF token攻击防护
首先,我们要先开启防护功能,在用户登陆操作之后,生成的CSRF Token就保存在cookies中。

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf()
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
            .ignoringAntMatchers("/authentication");
        .and()
        ...
    }
}

使用CookieCsrfTokenRepository生成CSRF Token放入cookie,并设置cookie的HttpOnly=false,允许js读取该cookie。
使用ignoringAntMatchers开放一些不需要进行CSRF防护的访问路径,比如:登录授权。
至此,我们生成了CSRF token保存在了cookies中,浏览器向服务端发送的HTTP请求,都要将CSRF token带上,服务端校验通过才能正确的响应。这个校验的过程并不需要我们自己写代码实现,Spring Security会自动处理。但是我们需要关注前端代码,如何正确的携带CSRF token。

五、前端请求携带CSRF Token的方式
在thymeleaf模板中可以使用如下方式,在发送HTTP请求的时候携带CSRF Token。如果是前后端分离的应用,或者其他模板引擎,酌情从cookies中获取CSRF Toekn。

5.1.在Header中携带CSRF token

var headers = {};
headers['X-CSRF-TOKEN'] = "${_csrf.token}";
$.ajax({    
    headers: headers,    
});

5.2.直接作为参数提交。

$.ajax({    
    data: {      
       "_csrf": "${_csrf.token}"        
    }
});

5.3.form表单的隐藏字段

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

相关文章

  • SpringSecurity实现CSRF跨站攻击防御

    一、什么是CSRFCORS(跨站资源共享)是局部打破同源策略的限制,使在一定规则下HTTP请求可以突破浏览器限制,...

  • Laravel - CSRF 攻击与防御

    CSRF攻击与防御-start 什么是CSRF攻击?CSRF是跨站请求伪造(Cross-site request ...

  • 面试12:安全类

    课程思维导图 Q:常见的攻击方式有哪些? CSRF:跨站请求伪造 XSS:跨站脚本攻击 Q:CSRF的原理及防御措...

  • 前端面试题六-前端安全性问题

    一、xss跨站脚本攻击 原理:方式:防御: 二、CSRF跨站请求伪造 原理:方式:防御 三、sql脚本注入 原理:...

  • 2018-03-29

    CSRF的攻击与防御 一、CSRF简介 CSRF(Cross-Site Request Forgery,跨站点伪造...

  • 9.1 CSRF攻击

    CSRF攻击: CSRF攻击概述: CSRF(Cross Site Request Forgery, 跨站域请求伪...

  • 最浅显易懂的Django系列教程(41)-CSRF攻击

    CSRF攻击: CSRF攻击概述: CSRF(Cross Site Request Forgery, 跨站域请求伪...

  • Csrf以及在SpringSecurity中的防护

    csrf(cross site request forgery)跨站请求伪造与springSecurity解决方案...

  • CSRF攻击和防御

    一. CSRF攻击 CSRF(Cross-site request forgery),跨站请求伪造。 攻击者盗用用...

  • CSRF攻击

    除了XSS攻击外,还有一种叫CSRF的攻击不容小视。 什么是CSRF攻击呢? CSRF攻击又称跨站请求伪造,攻击者...

网友评论

      本文标题:SpringSecurity实现CSRF跨站攻击防御

      本文链接:https://www.haomeiwen.com/subject/mywwahtx.html