跨站请求伪造(CSRF)攻击的变异形式:JSON CSRF详解
字数 1449 2025-12-04 11:36:34

跨站请求伪造(CSRF)攻击的变异形式:JSON CSRF详解

1. 问题描述

JSON CSRF(跨站请求伪造)是一种针对使用JSON格式传输数据的Web应用的攻击变种。传统CSRF攻击通常依赖表单自动提交或GET请求,而JSON CSRF则利用浏览器对JSON请求的处理特性,绕过部分防御机制(如基于表单Token的验证),实现未授权操作。

2. 攻击原理

2.1 传统CSRF的局限性

  • 传统防御依赖CSRF Token或验证Referer头。
  • 若应用仅检查Content-Type为application/json但未验证Token,攻击者可能通过构造特定请求绕过防御。

2.2 JSON CSRF的攻击条件

  1. 目标接口使用JSON格式接收数据(如RESTful API)。
  2. 服务端未严格验证请求来源(如忽略CSRF Token)或允许简单请求(CORS配置宽松)。
  3. 攻击者可诱导用户访问恶意页面,自动发送JSON格式的恶意请求。

3. 攻击步骤详解

3.1 构造恶意JSON请求

假设目标接口为https://api.example.com/transfer,接受JSON数据:

{"to": "attacker", "amount": 1000}

攻击者需在恶意页面中通过JavaScript发送POST请求:

<script>
  fetch('https://api.example.com/transfer', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ "to": "attacker", "amount": 1000 })
  });
</script>

3.2 绕过防御的常见技巧

  • 利用CORS宽松配置:若服务端响应头包含Access-Control-Allow-Origin: *,攻击页面可直接获取响应数据。
  • 使用自动发送的简单请求:通过<form><img>标签触发请求,但需服务端接受text/plain或未校验Content-Type。
  • 结合XSS或中间人攻击:若存在XSS漏洞,可直接注入脚本发送JSON请求。

4. 防御措施

4.1 服务端关键防护

  1. 强制验证CSRF Token

    • 将Token嵌入JSON体(如{ "csrf_token": "xxx", ... })而非仅依赖Cookie。
    • 避免依赖Referer头(可能被篡改或缺失)。
  2. 严格检查Content-Type

    • 要求请求头必须为application/json,并拒绝text/plainapplication/x-www-form-urlencoded
  3. CORS策略限制

    • 禁止使用Access-Control-Allow-Origin: *,仅允许可信域名。
    • 预检请求(Preflight)需验证方法(POST/PUT)和头部(Content-Type)。

4.2 客户端辅助防护

  • 关键操作需二次认证(如短信验证码、重新输入密码)。
  • 使用SameSite Cookie属性(Strict/Lax模式)限制跨站Cookie携带。

5. 实例分析

假设某银行API仅通过Cookie验证会话,且未校验CSRF Token:

  1. 攻击者搭建恶意网站,嵌入上述Fetch代码。
  2. 用户登录银行后访问恶意网站,浏览器自动携带Cookie发送转账请求。
  3. 服务端误认为合法操作,执行转账。

修复方案

  • 在JSON请求体中添加动态CSRF Token,服务端校验Token与会话绑定关系。
  • 配置CORS仅允许银行域名,并启用预检请求拦截跨域非法访问。

6. 总结

JSON CSRF通过滥用JSON接口的宽松安全策略,绕过传统表单类CSRF防御。防护核心在于服务端严格校验请求来源、强制使用Token,并配合CORS策略与SameSite Cookie,形成多层防御体系。

跨站请求伪造(CSRF)攻击的变异形式:JSON CSRF详解 1. 问题描述 JSON CSRF(跨站请求伪造)是一种针对使用JSON格式传输数据的Web应用的攻击变种。传统CSRF攻击通常依赖表单自动提交或GET请求,而JSON CSRF则利用浏览器对JSON请求的处理特性,绕过部分防御机制(如基于表单Token的验证),实现未授权操作。 2. 攻击原理 2.1 传统CSRF的局限性 传统防御依赖CSRF Token或验证Referer头。 若应用仅检查Content-Type为 application/json 但未验证Token,攻击者可能通过构造特定请求绕过防御。 2.2 JSON CSRF的攻击条件 目标接口使用JSON格式接收数据(如RESTful API)。 服务端未严格验证请求来源(如忽略CSRF Token)或允许简单请求(CORS配置宽松)。 攻击者可诱导用户访问恶意页面,自动发送JSON格式的恶意请求。 3. 攻击步骤详解 3.1 构造恶意JSON请求 假设目标接口为 https://api.example.com/transfer ,接受JSON数据: 攻击者需在恶意页面中通过JavaScript发送POST请求: 3.2 绕过防御的常见技巧 利用CORS宽松配置 :若服务端响应头包含 Access-Control-Allow-Origin: * ,攻击页面可直接获取响应数据。 使用自动发送的简单请求 :通过 <form> 或 <img> 标签触发请求,但需服务端接受 text/plain 或未校验Content-Type。 结合XSS或中间人攻击 :若存在XSS漏洞,可直接注入脚本发送JSON请求。 4. 防御措施 4.1 服务端关键防护 强制验证CSRF Token : 将Token嵌入JSON体(如 { "csrf_token": "xxx", ... } )而非仅依赖Cookie。 避免依赖Referer头(可能被篡改或缺失)。 严格检查Content-Type : 要求请求头必须为 application/json ,并拒绝 text/plain 或 application/x-www-form-urlencoded 。 CORS策略限制 : 禁止使用 Access-Control-Allow-Origin: * ,仅允许可信域名。 预检请求(Preflight)需验证方法(POST/PUT)和头部(Content-Type)。 4.2 客户端辅助防护 关键操作需二次认证(如短信验证码、重新输入密码)。 使用SameSite Cookie属性(Strict/Lax模式)限制跨站Cookie携带。 5. 实例分析 假设某银行API仅通过Cookie验证会话,且未校验CSRF Token: 攻击者搭建恶意网站,嵌入上述Fetch代码。 用户登录银行后访问恶意网站,浏览器自动携带Cookie发送转账请求。 服务端误认为合法操作,执行转账。 修复方案 : 在JSON请求体中添加动态CSRF Token,服务端校验Token与会话绑定关系。 配置CORS仅允许银行域名,并启用预检请求拦截跨域非法访问。 6. 总结 JSON CSRF通过滥用JSON接口的宽松安全策略,绕过传统表单类CSRF防御。防护核心在于服务端严格校验请求来源、强制使用Token,并配合CORS策略与SameSite Cookie,形成多层防御体系。