Web安全学习笔记 CSRF漏洞浅析
Web安全学习笔记 CSRF漏洞浅析
寂寞空庭春欲晚 满地梨花不开门
- 简介
- 分类
- 防御
- 参考链接
1. 简介
跨站请求伪造
(Cross-Site Request Forgery, CSRF)
也被称为 One Click Attack
或者 Session Riding 通常缩写为 CSRF
是一种对网站的恶意利用
尽管听起来像 XSS 但它与 XSS 非常不同
XSS 利用站点内的信任用户
而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站
2. 分类
类型1.资源包含
资源包含是在大多数介绍 CSRF 概念的演示或基础课程中可能看到的类型
这种类型归结为控制 HTML 标签
如 、、、、 等
所包含的资源的攻击者
如果攻击者能够影响 URL 被加载的话
包含远程资源的任何标签都可以完成攻击
由于缺少对 Cookie 的源点检查,如上所述
此攻击不需要 XSS
可以由任何攻击者控制的站点或站点本身执行
此类型仅限于 GET 请求
因为这些是浏览器对资源 URL 唯一的请求类型
这种类型的主要限制是
它需要错误地使用安全的 HTTP 请求方式
类型2. 基于表单
通常在正确使用安全的请求方式时看到
攻击者创建一个想要受害者提交的表单
其包含一个 JavaScript 片段
强制受害者的浏览器提交
该表单可以完全由隐藏的元素组成
以致受害者很难发现
如果处理 cookies 不当
攻击者可以在任何站点上发动攻击
只要受害者使用有效的 cookie 登录
攻击就会成功。如果请求是有目的性的
成功的攻击将使受害者回到他们平时正常的页面
该方法对于攻击者可以将受害者指向特定页面的网络钓鱼攻击特别有效
类型3. XHR
XMLHttpRequest 可能是最少看到的方式
由于许多现代 Web 应用程序依赖 XHR
许多应用花费大量的时间来构建和实现这一特定的对策
基于 XHR 的 CSRF 通常由于 SOP 而以 XSS 有效载荷的形式出现
没有跨域资源共享策略 (Cross-OriginResource Sharing, CORS)
XHR 仅限于攻击者托管自己的有效载荷的原始请求
这种类型的 CSRF 的攻击有效载荷基本上是一个标准的 XHR
攻击者已经找到了一些注入受害者浏览器DOM的方式
3. 防御
? 通过 CSRF-token 或者验证码来检测用户提交
? 验证 Referer/Content-Type
? 对于用户修改删除等操作最好都使用 POST 操作
? 避免全站通用的 Cookie,严格设置 Cookie 的域
4. 参考链接
? csrf-demo
https://github.com/jrozner/csrf-demo
? Wiping Out CSRF
https://zhuanlan.zhihu.com/p/30401930
? Neat tricks to bypass CSRF protection
https://zhuanlan.zhihu.com/p/32716181