为什么Cookie无法防止CSRF攻击,而Token可以?

CSRF(Cross Site Request Forgery)一般被翻译为跨站请求伪造,那跨站请求伪造是什么意思呢?就是说某人使用链接或其他方式用你的身份(也就是你发送请求携带的Cookie)去发送对你不友好的请求。举个简单的例子:

A登录了某银行网站,看到了一个“科学理财,年盈利率过万”的链接,A好奇点开了这个链接,结果发现自己的银行账户少了10000元,这是怎么回事呢?原来是有黑客在这个链接中藏了一个请求,这个请求直接利用A的身份给银行发送了一个转账请求,也就是通过A的Cookie向银行发出请求。

<a src=http://www.mybank.com/Transfer?bankId=11&money=10000>科学理财,年盈利率过万</>

上边提到,进行Session认证的时候,一般是使用Cookie来存储Session,当我们登录后,后端生成一个SessionId放在Cookie中返回给客户端,服务端通过Redis或者其他存储工具记录保存这个SessionId,客户端登录以后每次请求都会带上这个SessionId,服务端通过这个SessionId来标识登录用户这个人,如果别人通过Cookie拿到了SessionId后就可以代替你的身份访问系统了。

Session认证中,Cookie中的SessionId是由浏览器发送到服务端的,借助这个特性,攻击者就可以通过让用户误点攻击链接,达到攻击效果。

但是如果我们使用Token就不会存在这个问题,在我们登录成功获得Token之后,一般会选择存放在IocalStorage(浏览器本地存储)中,然后我们在前端通过某些方式会给每个发到后端的请求加上这个Token,这样就不会出现CSRF漏洞的问题。因为即使你点击了非法链接将请求发送到了服务端,这个非法请求是不会携带Token的,所以这个请求是非法的。

需要注意的是:不论是Cookie还是Token都无法避免跨站脚本攻击(Cross Site Scripting)XSS,跨站脚本攻击缩写为CSS,但是我们都知道层叠样式表的缩写也是CSS,所以很可能会混淆,因此,有人将跨站脚本攻击缩写为XSS。XSS攻击者会用各种方式将恶意代码注入到其他用户的页面中,就可以通过脚本盗用用户的信息,比如用户的Cookie信息。

 下一章我们说说如何防止CSRF攻击?

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值