最近想了解一下 CSRF 的原理,看了一些文章,懂了是懂了一点,然后自己也想整理回顾一下,于是便有了这篇文章。
CSRF介绍
先来看看mdn对 CSRF 上的解释
简单来说, CSRF是攻击者在用户不知情的情况下,通过冒用用户的cookie,向后台发送请求,后台识别到用户的cookie,认为攻击者就是用户的身份,从而导致请求成功的操作。
CSRF攻击流程
下面我用一张图来说明一下
主要流程:
- 首先用户在网站A进行登录操作,登录成功后产生cookie存在于浏览器中;
- 在网站A通过某些操作打开了危险网站B,这时候,危险网站B请求了网站A的接口(危险),因为这时候会带着cookie进行访问
- cookie认证成功,服务器认为是用户本人,请求成功,则达到了攻击的目的了;
防御机制
根据上面的流程分析,主要是身份通过cookie认证不太安全; 那如果要防御就得从cookie这边着手
SameSite
谷歌新增的一个针对cookie的属性,主要是用来限制第三方cookie,也就是说可以限制危险网站B不能冒用网站A的cookie
可选值有三个:
Strict
严格模式,完全限制第三方cookie。任何情况下都不会直接发送cookie,除非新打开的网站和本身的网站是同域的。 有个不好的点就是,就是如果我有外链打开这个网站,如果我之前登陆过,现在又得重新登录一遍,会影响体验;
Lax
宽松模式,大部分不会直接发送cookie,只有在打开的链接是get请求(比如GET 表单,a链接)除外;
None
完全不限制,第三方可以使用cookie,但是需要设置secure属性(通过https访问);
同源检测
既然第三方会冒用cookie,那么就可以验证请求的来源是哪个,可以通过headers
里面的origin
和refer
属性可以知道第三方的来源,判断是来源是一致的才处理该请求;
token认证
另外我们可以通过增加token验证来防御,这个token是由服务端生成;客户端存储(但是token不能存储在cookie),然后请求发出的时候戴上这个token,后端在服务端验证这个token是否准确
验证码
我们在提交请求的时候,需要用户输入验证码才能提交,通过增加验证码的校验,这样第三方也不能窃取到当前页面的验证码,也能防范,只不过体验不是很好(因为每次请求都得输入验证码)
总结
这就是我总结的的CSRF入门了解,我们虽然是前端(俗称页面仔,开个玩笑),安全问题我们可能有时候不一定能接触到,但是我们还是了解一下,因为说不定哪天就派上用场了。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!