为什么CSRF Token写在COOKIE里面

最近做渗透测试的时候经常看到用户的COOKIE信息里带有CSRF等字样的信息,问了一下同事,他们说这个是用来防御CSRF的字段。

这一下可把我弄懵了,因为我对CSRF的理解是:攻击者盗用用户的COOKIE执行非用户本意的操作。

我的想法是,用户的COOKIE就像是一张门禁卡一样,攻击者可以盗用用户的门禁卡,以被盗用户的身份来执行一些设计增删改的操作,既然用户已经盗用了用户的COOKIE刷卡进门了,这个COOKIE对攻击者的防御也应该也就失效了才对。

 

但是遵循存在即合理的原则,我还是好好了解了一下为什么CSRF-Token可以写道COOKIE里。

将csrf令牌写入Cookie,是因为:
服务器进行csrf防御校验的时候,是拿用户http请求体中的token参数值和cookie中的csrftoken值进行比对。
如果值一样了,操作才被允许执行。

因为同源策略的限制,当正常用户通过账号密码等方式登陆网站A后,在不注销账号或当前COOKIE失效之前,再次访问网站A时(协议、IP、端口号相同则属于同源)浏览器会自动在HTTP请求包中带上该网站用户登陆后的COOKIE信息。

也就是说我们对CSRF的理解应为:攻击者借用用户COOKIE执行非用户本意的操作。

在此攻击过程中用户COOKIE对于攻击者来说是不可见的是未知的、不可见的,攻击者能做到仅仅是借用COOKIE,而COOKIE里面具体写了什么,攻击者是不知道的。又因为COOKIE里的信息对于攻击者来说是不可预知的,无法伪造的,所以将CSRF-TOKEN写在COOKIE中符合就CSRF防御思想中的不可预知原则。

将CSRF-TOKEN写在COOKIE中可抵御CSRF攻击,但前提是网站不存在XSS漏洞或者CSRF-Token具备httponly属性。

 

正常来说,比较容易理解的是,正确的CSRFtoken被放在了服务器的Session文件中。

当用户执行增删改操作的时候,服务器会从用户对应的Session文件中取出这个Token值和用户提交到服务器的Token值做对比

如果两者数值相同,用户的增删改操作才是被允许执行的,否则用户的请求就是不合法的,即CSRF。

 

所以用户COOKIE中存在CSRF-Token信息,其实是服务器保存正确CSRF-Token的一种形式。

它与将CSRF-Token存储在Session中是一样的,仅仅是Token的一种储存形式。
————————————————
版权声明:本文为CSDN博主「白帽梦想家」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sdb5858874/article/details/81666194

おすすめ

転載: blog.csdn.net/qq_40146082/article/details/105991173