深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
字数 1660 2025-08-30 06:50:12

JSONP注入漏洞深度剖析与防御指南

1. JSONP注入漏洞概述

JSONP (JSON with Padding) 是一种用于解决跨域数据请求的技术,它通过动态创建<script>标签来实现跨域数据获取。然而,当JSONP实现不当时,会导致严重的安全漏洞:

  • 高危特性:未过滤的JSONP回调函数可导致完整会话Cookie泄露
  • 利用难度:低
  • 危害程度:极高,可实现完全身份冒充
  • 典型场景:企业登录系统、SP平台等使用JSONP进行跨域通信的场景

2. 漏洞挖掘与识别

2.1 识别JSONP端点

在渗透测试中,寻找以下特征的接口:

  • 响应中包含callbackjsonp或类似参数
  • 响应内容为JavaScript代码而非纯JSON
  • Content-Type可能为application/javascript而非application/json

示例漏洞接口

https://example.com/api/userinfo?callback=processUserData

2.2 前端代码审计关键点

审查前端JavaScript代码时,重点关注:

  1. 高危函数使用

    • eval() - 直接执行字符串中的JS代码
    • Function()构造函数 - 动态创建可执行函数
    • setTimeout()/setInterval() - 当第一个参数为字符串时
    • document.write()/innerHTML - 可能导致XSS
  2. JSONP实现方式

    • 是否对回调函数名进行了严格过滤
    • 响应是否设置了正确的Content-Type头
    • 是否使用了不安全的动态代码执行方式

3. 漏洞利用技术

3.1 基本攻击流程

  1. 拦截JSONP响应(使用Burp Suite等工具)
  2. 注入恶意JavaScript代码
  3. 利用回调函数执行任意代码

攻击示例

// 正常响应
callback({"user":"admin","token":"xyz"});

// 恶意注入
callback({}); alert(document.cookie); //

3.2 高级利用技术

  1. 函数劫持

    • 劫持Object.assign等原生函数
    • 覆盖默认行为以执行恶意代码
  2. 会话窃取

    • 通过alert()或外部请求泄露完整Cookie
    • 窃取JSESSIONID等关键会话标识
  3. 无交互劫持

    • 在用户无感知情况下完成攻击
    • 可绕过验证码等安全措施

4. 漏洞防御措施

4.1 服务端防御

  1. 严格过滤回调函数名

    • 只允许字母数字和下划线
    • 限制长度(如最多32字符)
  2. 设置正确的Content-Type

    • 强制设置为application/json
    • 避免浏览器误解析为JS
  3. 添加CSRF防护

    • 校验Referer头
    • 使用一次性token

4.2 客户端防御

  1. 避免使用高危函数

    • JSON.parse()替代eval()
    • 避免动态执行不可信代码
  2. 实施严格的CSP策略

    • 限制脚本来源
    • 禁止内联脚本执行
  3. 会话保护

    • 设置HttpOnlySecure标志
    • 使用SameSite Cookie属性

5. 安全开发建议

  1. 优先使用CORS

    • 现代应用中应优先考虑CORS而非JSONP
    • 更安全且功能更完善
  2. 输入验证与输出编码

    • 对所有输入进行严格验证
    • 对动态内容进行适当的编码
  3. 安全审计

    • 定期进行代码安全审计
    • 特别关注跨域通信相关代码

6. 渗透测试检查清单

在进行JSONP相关安全测试时,使用以下检查项:

  1. 全局搜索以下关键词:

    • eval(
    • Function(
    • setTimeout(
    • innerHTML
    • jsonp
    • callback
  2. 测试所有JSONP端点:

    • 尝试注入任意回调函数名
    • 测试XSS payload
    • 检查会话信息泄露
  3. 验证防御措施:

    • 检查Content-Type头
    • 验证回调函数名过滤
    • 测试CSRF防护

7. 总结

JSONP注入漏洞虽然原理简单,但危害极大。通过本文的分析,我们了解到:

  1. 不安全的JSONP实现可导致会话完全被接管
  2. eval()等高危函数是主要风险点
  3. 严格的输入验证和输出编码是防御关键
  4. 现代应用应优先考虑CORS等更安全的替代方案

安全开发需要时刻保持警惕,特别是在处理跨域通信和动态代码执行时,必须实施多层防御措施,才能有效保护用户数据和系统安全。

JSONP注入漏洞深度剖析与防御指南 1. JSONP注入漏洞概述 JSONP (JSON with Padding) 是一种用于解决跨域数据请求的技术,它通过动态创建 <script> 标签来实现跨域数据获取。然而,当JSONP实现不当时,会导致严重的安全漏洞: 高危特性 :未过滤的JSONP回调函数可导致完整会话Cookie泄露 利用难度 :低 危害程度 :极高,可实现完全身份冒充 典型场景 :企业登录系统、SP平台等使用JSONP进行跨域通信的场景 2. 漏洞挖掘与识别 2.1 识别JSONP端点 在渗透测试中,寻找以下特征的接口: 响应中包含 callback 、 jsonp 或类似参数 响应内容为JavaScript代码而非纯JSON Content-Type可能为 application/javascript 而非 application/json 示例漏洞接口 : 2.2 前端代码审计关键点 审查前端JavaScript代码时,重点关注: 高危函数使用 : eval() - 直接执行字符串中的JS代码 Function() 构造函数 - 动态创建可执行函数 setTimeout() / setInterval() - 当第一个参数为字符串时 document.write() / innerHTML - 可能导致XSS JSONP实现方式 : 是否对回调函数名进行了严格过滤 响应是否设置了正确的Content-Type头 是否使用了不安全的动态代码执行方式 3. 漏洞利用技术 3.1 基本攻击流程 拦截JSONP响应(使用Burp Suite等工具) 注入恶意JavaScript代码 利用回调函数执行任意代码 攻击示例 : 3.2 高级利用技术 函数劫持 : 劫持 Object.assign 等原生函数 覆盖默认行为以执行恶意代码 会话窃取 : 通过 alert() 或外部请求泄露完整Cookie 窃取 JSESSIONID 等关键会话标识 无交互劫持 : 在用户无感知情况下完成攻击 可绕过验证码等安全措施 4. 漏洞防御措施 4.1 服务端防御 严格过滤回调函数名 : 只允许字母数字和下划线 限制长度(如最多32字符) 设置正确的Content-Type : 强制设置为 application/json 避免浏览器误解析为JS 添加CSRF防护 : 校验Referer头 使用一次性token 4.2 客户端防御 避免使用高危函数 : 用 JSON.parse() 替代 eval() 避免动态执行不可信代码 实施严格的CSP策略 : 限制脚本来源 禁止内联脚本执行 会话保护 : 设置 HttpOnly 和 Secure 标志 使用SameSite Cookie属性 5. 安全开发建议 优先使用CORS : 现代应用中应优先考虑CORS而非JSONP 更安全且功能更完善 输入验证与输出编码 : 对所有输入进行严格验证 对动态内容进行适当的编码 安全审计 : 定期进行代码安全审计 特别关注跨域通信相关代码 6. 渗透测试检查清单 在进行JSONP相关安全测试时,使用以下检查项: 全局搜索以下关键词: eval( Function( setTimeout( innerHTML jsonp callback 测试所有JSONP端点: 尝试注入任意回调函数名 测试XSS payload 检查会话信息泄露 验证防御措施: 检查Content-Type头 验证回调函数名过滤 测试CSRF防护 7. 总结 JSONP注入漏洞虽然原理简单,但危害极大。通过本文的分析,我们了解到: 不安全的JSONP实现可导致会话完全被接管 eval() 等高危函数是主要风险点 严格的输入验证和输出编码是防御关键 现代应用应优先考虑CORS等更安全的替代方案 安全开发需要时刻保持警惕,特别是在处理跨域通信和动态代码执行时,必须实施多层防御措施,才能有效保护用户数据和系统安全。