SpringSecurity框架下实现CSRF跨站攻击防御的方法

一、什么是CSRF

很多朋友在学习Spring Security的时候,会将CORS(跨站资源共享)和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跨站攻击防御,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • spring security CSRF防护的示例代码

    CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的攻击之一. 从Spring Security 4.0开始,默认情况下会启用CSRF保护,以防止CSRF攻击应用程序,Spring Security CSRF会针对PATCH,POST,PUT和DELETE方法进行防护. 我这边是spring boot项目,在启用了@EnableWebSecurity注解后,csrf保护就自动生效了. 所以在默认配置下,即便已经登录了,页面中发起PATCH,POST,P

  • 详解如何在spring boot中使用spring security防止CSRF攻击

    CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF.  CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. CSRF漏洞现状 CSRF这种攻击方式

  • Spring Security CsrfFilter过滤器用法实例

    这篇文章主要介绍了Spring Security CsrfFilter过滤器用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 spring security框架提供的默认登录页面,会有一个name属性值为_csrf的隐藏域: 这是框架在用户访问登录页面之前就生成的,保存在内存中,当用户提交表单的时候会跟着一起提交:_csrf_formdata 然后会经过spring security框架resources目录下配置文件spring-sec

  • 详解利用spring-security解决CSRF问题

    CSRF介绍 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 具体SCRF的介绍和攻击方式请参看百度百科的介绍和一位大牛的分析: CSRF百度百科 浅谈CSRF攻击方式 配置步骤 1.依赖jar包 <properties> <spring.security.version>4.2.2.RELEASE</spring.security

  • 使用SpringSecurity处理CSRF攻击的方法步骤

    CSRF漏洞现状 CSRF(Cross-site request forgery)跨站请求伪造,也被称为One Click Attack或者Session Riding,通常缩写为CSRF或XSRF,是一种对网站的恶意利用.尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性. CSRF是一种

  • SpringSecurity框架下实现CSRF跨站攻击防御的方法

    一.什么是CSRF 很多朋友在学习Spring Security的时候,会将CORS(跨站资源共享)和CSRF(跨站请求伪造)弄混,以为二者是一回事.其实不是,先解释一下: CORS(跨站资源共享)是局部打破同源策略的限制,使在一定规则下HTTP请求可以突破浏览器限制,实现跨站访问. CSRF是一种网络攻击方式,也可以说是一种安全漏洞,这种安全漏洞在web开发中广泛存在. 当我们使用Spring Security的时候,这种CSRF漏洞默认的被防御掉了.但是你会发现在跨域请求的情况下,我们的PO

  • Python djanjo之csrf防跨站攻击实验过程

    一.CSRF简介 CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账-造成的问题包括:个人隐私泄露以及财产安全. CSRF漏洞现状? CSRF这种

  • Django框架CBV装饰器中间件auth模块CSRF跨站请求问题

    CBV添加装饰器 给CBV添加装饰器有三种方法,三种方法都需要导入模块: from django.utils.decorators import method_decorator 第一种直接在方法上面添加: from django.utils.decorators import method_decorator class MyLogin(View): @method_decorator(auth) def get(self, request): return HttpResponse('Is

  • ThinkPHP2.x防范XSS跨站攻击的方法

    本文实例讲述了ThinkPHP2.x防范XSS跨站攻击的方法.分享给大家供大家参考.具体如下: 一直使用ThinkPHP2.x,通过乌云有向提交了ThinkPHP XSS攻击的bug,抽时间看了一下. 原理是通过URL传入script标签,ThinkPHP异常错误页面直接输出了script. 原理: http://ask.lenovo.com.cn/index.php?s=1%3Cbody+onload=alert(1)%3E 其中m的值是一个不存在的module,同时是一个完全的script,

  • CSRF跨站请求伪造漏洞分析与防御

    目录 CSRF 漏洞原理 漏洞危害 防御绕过 漏洞利用 防御措施 总结 CSRF 现在的网站都有利用CSRF令牌来防止CSRF,就是在请求包的字段加一个csrf的值,防止csrf,要想利用该漏洞,要和xss组合起来,利用xss获得该csrf值,在构造的请求中将csrf值加进去,就可以绕过csrf防御,利用该漏洞. 该漏洞与xss的区别:xss是通过执行恶意脚本,获取到用户的cookie等信息,再利用cookie等信息进行绕过登录限制,做一些用户可以做的事. 而csrf是伪造请求,让用户自己执行攻

  • Laravel5中防止XSS跨站攻击的方法

    本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HTMLPurifier 防止 XSS 跨站攻击. 1.安装 HTMLPurifier 是基于 PHP 编写的富文本 HTML 过滤器,通常我们可以使用它来防止 XSS 跨站攻击,更多关于 HTMLPurifier的详情请参考其官网:http://htmlpurifier.org/.Purifier 是

  • php跨站攻击实例分析

    本文实例讲述了php跨站攻击的原理与防范技巧.分享给大家供大家参考.具体方法分析如下: 跨站攻击就是利用程序上的一些细节或bug问题进行的,那么我们要如何耿防止跨站攻击呢?下面就以一个防止跨站攻击例子来说明,希望对各位有帮助. 复制代码 代码如下: <?php #demo for prevent csrf /** * enc */ function encrypt($token_time) { return md5('!@##$@$$#%43' . $token_time); } $token_

  • PHP和XSS跨站攻击的防范

    其实这个话题很早就想说说了,发现国内不少PHP站点都有XSS漏洞.今天偶然看到PHP5的一个XSS漏洞,在此小结一下.顺便提醒,使用PHP5的朋友最好打下补丁,或者升级一下. 如果你不懂什么是XSS,可以看这里,或者这里(中文的也许会好懂一些). 国内不少论坛都存在跨站脚本漏洞,例如这里  有一个Google Hack+XSS的攻击例子,针对的是Discuz 4.0.0RC3.国外也很多这样的例子,甚至Google也出现过,不过在12月初时修正了.跨站攻击很容易就可以构造,而且非常隐蔽,不易被查

  • BBSXP5.15跨站攻击漏洞

    前言:在新云网站管理系统1.02出来的时候,他的留言本就存在跨站漏洞,我测试了黑客动画吧,还好没有开放留言本功能,然后又测试了黑软基地 居然可以成功利用,和新云官方网站都成功拿倒了管理元的cookies. 想不到吧. 看来跨站不得不防范啊! BBSXP的漏洞近段时间闹得可火.现有的漏洞大家都见过了,就不说了.今晚无聊,看了看BBSXP 5.15最新版的几个文件代码,发现还是存在跨站攻击的漏洞. Cookies.asp文件,代码如下: 对提交的 "no" 参数没做处理.再看setup.a

  • 解析django的csrf跨站请求伪造

    目录 1.什么是跨站请求伪造 2.如何规避跨站请求伪造(csrf校验) 3.如何符合csrf校验 3.1 form表单如何符合校验 3.2 ajax如何符合校验 4.csrf相关的装饰器 4.1 针对FBV的csrf装饰器 4.2 针对CBV的csrf装饰器 1.什么是跨站请求伪造 请看图: 我们自行写了一个网站模仿中国银行,用户不知道是否是真的中国银行,并且提交了转账信息,生成一个form表单,向银行服务器发送转账请求,这个form表单和正规银行网站的form表单一模一样,只不过里面隐藏着改变

随机推荐