简介
定义
CSRF(Cross Site Request Forgery)跨站请求伪造,是一种网络的攻击方式,也被称为One Click Attack
或者Session Riding
,通常缩写为CSRF或者XSRF
漏洞产生原因
当Web应用程序在用户进行敏感操作时,如:修改账号密码、添加账号、转账等时,没有校验表单token
或者http请求头中的referer
值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为
漏洞原理
CSRF是一种针对Web应用的攻击方式。它可以在受害者毫不知情的情况下,以受害者的名义伪造请求,并发送给受攻击的站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大危害性。
与其他攻击方式(SQL注入、上传、XSS等)相比,CSRF的关注度较少,也更容易出现
利用方法
一次CSRF攻击的过程中,受害者需要依次完成两个步骤:
- 登录受信任网站A,并在本地生成Cookie
- 在A的Cookie存活期间内,访问危险网站B
eg:
网站A的管理员A成功登录网站A
正常返回Cookie网站A的账号密码修改功能存在CSRF漏洞
- 网站B为黑客控制的恶意网站
- 管理员A访问网站B
- HTTP Request:
1
2
3HTTP/1.1
GET/
Host: www.test.com
- 网站B的响应数据中,包含了请求修改用户A在网站A账号密码的请求
HTTP Response
1
2
3
4
5
6
7
8HTTP /1.1 OK
Content-Type:text/html
Context-Length: 1024
<html>
<body>
<img src=http://finance.bdtest.com/bug.php?symbol=BIDU&shares=1000 />
</body>
</html>CSRF Attack
1
2
3HTTP/1.1
GET /bug.php?symbol=BIDU&shares=1000
Host: finance.bdtest.com
高危触发点
- 论坛交流
- 用户中心
- 反馈留言
- 交易管理
- 后台管理
漏洞危害
CSRF漏洞会导致受害人在不知情的情况下向论坛发帖子、订阅邮件列表、网购或股票交易、变更用户名或口令。对受到防火墙保护的所有Web应用程序而言,CSRF攻击都能绕过防火墙攻击Web应用
CSRF还可与XSS等漏洞联用,从而进一步加大该漏洞的危害。
主要危害可主要归为以下几类
- 伪造HTTP请求进行未授权操作
- 篡改、盗取目标网站上的重要用户信息
- 未经允许执行对用户名誉或资产有害的操作,如:散播不良信息、进行消费等
- 若通过使用社工等方式攻击网站管理员,会危害网站本身的安全性
- 作为其它攻击向量的辅助手法,比如配合XSS
- 传播CSRF蠕虫
漏洞防御
Token验证码实现
1 |
|
Referer验证代码实现
1 |
|
防御总结
CSRF攻击核心时伪造请求,识别此类攻击的重点就是判断当前操作是否伪造;通过在当前页面生成随机Token,后端业务逻辑在处理操作时,应先校验Token的有效性,然后才能处理业务流程。尤其在核心业务中,采用Token+Referer的组合进行操作验证;采用验证码校验操作是因为攻击者无法预知验证码的值,进而无法构造有效的攻击;但毫无疑问,验证码会一定程度影响用户体验,所以需要在安全与用户体验之间找到一个微妙的平衡点
补充
CSRF与XSS区别
- csrf:无需获取任何信息,只是诱导用户进行恶意访问,要利用已登录的状态,发起登录后才能发起的请求
- xss:获取到Cookie等信息后,利用Cookie登录
bwapp安装
- 修改
admin/setting
数据用户密码 - 点击
here
- 新建用户登录
同源策略
同源策略,由浏览器支持(域名、协议、端口相同)
思考以下是否同源:1
2file:///C:/phpStudy/PHPTutorial/WWW/127.0.0.1html
http://127.0.0.1/127.0.0.1.html
答:不属于同源
浏览器同源策略与跨域问题(跨域访问)