当前位置:网站首页>csrf防护机制
csrf防护机制
2022-07-17 22:04:00 【悠然予夏】
1、什么是csrf
CSRF(Cross-site request forgery),中文名称:跨站请求伪造
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。
2、CSRF的原理

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成三个步骤:
- 登录受信任网站A,并在本地生成Cookie。
- 在不登出A的情况下,访问危险网站B。
- 触发网站B中的一些元素
3、CSRF的防御策略
在业界目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token并验证;在 HTTP 头中自定义属性并验证。
3.1、验证 HTTP Referer 字段
根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,在后台请求验证其 Referer 值,如果是以自身安全网站开头的域名,则说明该请求是是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
3.2、在请求地址中添加 token 并验证
CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
3.3、在 HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。
4、security中的csrf防御机制
org.springframework.security.web.csrf.CsrfFilter
csrf又称跨站请求伪造,SpringSecurity会对所有post请求验证是否包含系统生成的csrf的token信息,如果不包含,则报错。起到防止csrf攻击的效果。(1. 生成token 2.验证token)
4.1、开启csrf防护
// 关闭csrf防护
// http.csrf().disable();
// 开启csrf防护,定义哪些路径不需要防护
http.csrf().ignoringAntMatchers("/user/save");4.2、页面需要添加token值
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>边栏推荐
猜你喜欢

Which company is better in data filling and report presentation? Yixin ABI gives you the answer

OSPF appendix anti ring Reissue

Code runner for vs code, with more than 40million downloads! Support more than 50 languages

Zabbix实现对Redis的监控

抽象類與派生類

MVCC多版本并发控制
![[port 3000 is already in use, solution to the problem of 3000 port being occupied]](/img/6f/6c8fdbc6b0b2794433c97e77185111.png)
[port 3000 is already in use, solution to the problem of 3000 port being occupied]

MySQL view
![Can [C language - user defined type] be adjusted like this?](/img/f0/313cd86d875f6d1ffc516ab8de3477.png)
Can [C language - user defined type] be adjusted like this?

dba
随机推荐
CF 807 E. mark and Professor Koro (weight segment tree)
[Axi] interpret the additional signals of the Axi protocol (QoS signal, region signal, and user signal)
滑动窗口最大值问题
TDesign CompositionAPI 重构之路
Vscode download historical version
Database SQL Server
2021.07.13【B站】是这样崩的
见鬼,U盘空间怎么少了,原来是EFI分区搞的鬼,删除它
Domestic fpga/dsp/zynq Chip & board scheme
Encrypt Ogg users
Unity uses a map to control the transparency of the material's main map
[flask introduction series] exception handling
ospf-LSA
3U VPX cooling conduction high performance srio/ Ethernet data exchange board
LabVIEW uses multithreading. Will the program run faster
Optimizer of pytoch framework optimizer
2、MYSQL介绍
学习记录[email protected]之moveActivityIdTo任务回退特殊案例分析
证券账户上买基金安全吗,我要做基金定投
OSError: sndfile library not found 解决方案