什么是CSRF?为什么CSRF Token写在COOKIE里面?

自制工具   翰华Box:https://hanhuabox.lanzous.com/b00zjq9uf

翰华Box - 开发日志:https://blog.csdn.net/qq_41517936/article/details/106409456

    跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

攻击细节

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

例子

假如一家银行用以运行转账操作的URL地址如下:http://www.examplebank.com/withdrawaccount=AccoutName&amount=1000&for=PayeeName

那么,一个恶意攻击者可以在另一个网站上放置如下代码: <img src="http://www.examplebank.com/withdrawaccount=Alice&amount=1000&for=Badman">

如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。

这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险

透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义运行操作

什么是CSRF?为什么CSRF Token写在COOKIE里面?

为什么CSRF Token写在COOKIE里面

什么是CSRF?为什么CSRF Token写在COOKIE里面?

下面这里就是引用的了:https://blog.csdn.net/sdb5858874/article/details/81666194

最近做渗透测试的时候经常看到用户的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的一种储存形式。