有关“Token防范CRSF攻击”的理解

在学HTTP的时候看到这句话,脑子比较笨想了很久才想明白,在这里记录下

咱也不知道对不对,如果有问题欢迎指出

1. 什么是CRSF攻击

就是Cross-site request forgery 跨站请求伪造

简单来说就是你访问了一个奇怪的坏网站,被坏网站诱导向另一个网站攻击

当你登录一个网站A后,在没有登出的情况下,你又跑到一个其他的论坛上闲逛,然后你看到一个美女的图片,你出于好奇心,点击了美女图片,这个时候,可能就被攻击了;原因是美女图片的的超链接(link)可能是不法分子弄的,指向的可能是A网站,由于你在A网站还是登陆态,那么你点击的这个link就是以你登录态的进行的,比如可以用你的登录态发布评论;严重的可能进行转账。而你却浑然不知

上面例子中图片的HTML代码可以是

<a href="http://www.a.com/addcomments?comment='XX是XX'"><img src='http://xx.com/beauty.jpg'/></a>

2. 为什么Token可以防止CSRF而Cookie不行

2.1 Cookie为什么会造成CSRF 

首先说下Cookie为什么可以被坏人拿来进行CSRF

我们都知道,浏览器发送请求时会带上Cookie来向服务端Session发送一些用户偏好等信息,来解决HTTP无状态的缺陷。

有一些请求是form 发起的不受到浏览器同源策略的限制都,比如 POST ,因此可以任意地使用其他域的 Cookie 向其他域发送请求,形成 CSRF 攻击。

2.2 为什么Token不会呢?

这涉及到Token与Cookie的一个区别:

  • 请求时,Token由前端【手动】添加
  • Cookie由浏览器无脑【自动】添加

比如:

我们在A网站登录后,创建对应的session,浏览器也保存了对应的Cookie,并且没有关闭这个Session;

然后跳到不正经的网站B瞅几眼,不小心点到不正经的图片,马上要被利用进行CRSF攻击了!

这时候Token与Cookie的差别就出现了:

  • Cookie会在B网站被浏览器【自动】装进请求头一起发出去,CRSF攻击就达成了
  • Token不是浏览器自动装的,需要A网站前端【手动】装进请求,所以在B网站就不会被盗用

因此, Token可以抵抗CSRF攻击。

但是如果把Token放在Cookie里就另说了....

3. Token就一定安全了吗

当然不是,只是说他能防CSRF。

如果用的是HTTP协议,那Token也有被抓包解析重用的风险,当然也有对应的应对方法,这里先不说了

4. 其他应对CSRF的方法

可以参考美团这个文档(我还没看完):

前端安全系列(二):如何防止CSRF攻击? - 美团技术团队

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值