CSRF( 跨站请求伪造)学习笔记

百度百科中的CSRF

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

CSRF和XSS的工作原理

XSS:

攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击

CSRF:

攻击者发现CSRF漏洞——构造代码——发送给受害人——受害人打开——受害人执行代码——完成攻击

而且XSS容易发现,因为攻击者需要登录后台完成攻击。管理员可以看日志发现攻击者。‍‍‍‍
‍‍而CSRF则不同,他的攻击一直是管理员自己实现的,攻击者只负责了构造代码。‍‍CSRF少了一个 获取受害人的cookie的步骤,因为受害人在执行代码的时候就已经完成的攻击,而攻击者并没有参与进来。‍‍

CSRF的本质

CSRF为什么能够攻击成功,其本质原因是重要操作的所有参数都是可以被攻击者猜测到的。

攻击者只有预测出URL的所有参数与参数值,才能成功地构造出一个伪造的请求;反之,攻击者将无法攻击成功。


CSRF( 跨站请求伪造)学习笔记_第1张图片
图片.png

因此引入了Anti CSRF Token

保持原参数不变,新增一个参数Token。这个Token的值是随机的,不可预测的。
Token需要足够随机,必须使用足够安全的随机数生成算法,或者采用真随机数生成器。Token应该作为一个”秘密“, 为用户与服务器所共同持有的,不能被第三者知晓。
由于Token的存在,攻击者无法再构造出一个完整的URL实施CSRF攻击。
Token需要同时放在表单和Session中。在提交表单的时候,服务器只需要验证表单中的Token与用户Session(或COOKIE)中的Token是否一致,如果一致,则认为是合法请求;如果不一致,或者有一个为空,则认为请求不合法,可能发生了CSRF攻击。

CSRF( 跨站请求伪造)学习笔记_第2张图片
图片.png

CSRF可以做什么

攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

实例

如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

  1. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

  2. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

  3. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

比较好的攻击实例
CSRF( 跨站请求伪造)学习笔记_第3张图片
图片.png

GET?POST?

GET类型CSRF


访问页面后就成功向http://xxx.org/csrf.php 发送了一次请求