CSRF概念
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
跨站请求伪造, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
CSRF漏洞的本质是浏览器在不应该发送cookie的地方发送cookie。
cookie相关知识:
1、cookie的属性:key、value、expires、domain、path、secure、httponly、samesite
2、只要有请求就会携带cookie
3、cookie无法验证是从哪个网站过来的
4、cookie遵守的是同站策略不是同源策略
CSRF攻击流程
CSRF攻击过程有以下两个重点:
1.目标用户已经登录了网站,能够执行网站的功能
2.
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
CSRF的常见攻击
GET类型的CSRF
1 <img src="攻击方让受害者做的网站请求" >
POST类型的CSRF
1 <form action="攻击方让受害者做的网站请求" method=POST>
2 <input type="hidden" name="account" value="xiaoming" />
3 <input type="hidden" name="amount" value="10000" />
4 <input type="hidden" name="for" value="hacker" />
5 </form>
6 <script> document.forms[0].submit(); </script>
链接类型的CSRF
1 <a href="攻击方让受害者做的网站请求" taget="_blank">
2 重磅消息!!
3 <a/>
CSRF攻击案例
WordPress的CSRF漏洞
YouTube的CSRF漏洞
Gmail的CSRF漏洞
CSRF的特点危害
攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。
整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪。
发送恶意请求消息
配合蠕虫扩散
盗取信息
CSRF的防范
用户跳转第三方网页的提示
阻止不明外域的访问
同源检测
在HTTP协议中,每个异步请求都会携带两个Header用于标记来源域名:
- Origin Header
- Referer Header
这两个Header在浏览器发起请求时,大多数情况会自动带上,并且不能由前端自定义内容。 服务器可以通过解析这两个Header中的域名,确定请求的来源域。
Origin 指示了请求来自于哪个站点,只有服务器名,不包含路径信息,浏览器自动添加到http请求 Header 中,无需手动设置
Referer 指示了请求来自于哪个具体页面,包含服务器名和路径的详细URL,浏览器自动添加到http请求 Header 中,无需手动设置。
提交时要求附加本域才能获取的信息
Token
双重Cookie
samesite
Strict
Lax
CSRF的总结
cookie的合理利用
token的利用
用户跳转第三方网页的提示