当前位置: 首页 > article >正文

JSONP 漏洞

JSONP 漏洞介绍

JSONP (JSON with Padding) 是一种用于跨域数据请求的技术,通常用于绕过浏览器的同源策略(Same-Origin Policy)。它通过动态创建 <script> 标签来加载外部资源,并利用回调函数处理返回的数据。

漏洞原理

JSONP 的漏洞主要源于以下问题:

  1. 缺乏输入验证:如果服务器未对回调函数名进行严格的验证,攻击者可以注入恶意代码。
  2. 数据泄露:JSONP 返回的数据可能包含敏感信息,如果未正确限制访问,可能导致信息泄露。
  3. 跨站脚本攻击 (XSS):如果回调函数名或返回的数据未经过滤,攻击者可以注入恶意脚本,导致 XSS 攻击。
漏洞示例

假设一个 JSONP 接口如下:

http://example.com/api?callback=myCallback

返回的数据格式为:

myCallback({"data": "sensitive information"});

如果攻击者构造一个恶意的回调函数名,例如:

http://example.com/api?callback=alert('XSS');

服务器返回:

alert('XSS')({"data": "sensitive information"});

这会导致 XSS 攻击。


解决方法

  1. 禁用 JSONP

    • 如果可能,完全禁用 JSONP,改用更安全的跨域技术,如 CORS (Cross-Origin Resource Sharing)
  2. 严格验证回调函数名

    • 限制回调函数名只能包含字母、数字和下划线,并设置最大长度。
    • 示例:
      const callback = req.query.callback;
      if (!/^[a-zA-Z0-9_]+$/.test(callback)) {
          return res.status(400).send("Invalid callback name");
      }
      
  3. 返回固定格式的 JSONP

    • 确保返回的数据始终是 JSON 格式,并在回调函数中包裹。
    • 示例:
      const data = { "data": "sensitive information" };
      res.send(`${callback}(${JSON.stringify(data)})`);
      
  4. 限制敏感数据

    • 避免通过 JSONP 返回敏感信息,如用户凭证、个人隐私等。
  5. 使用 HTTPS

    • 确保 JSONP 接口通过 HTTPS 传输,防止数据被中间人攻击窃取。
  6. 设置 Content-Type

    • 确保返回的 Content-Type 为 application/javascript,而不是 text/html,以防止浏览器将响应解析为 HTML。
  7. 使用 CSP (Content Security Policy)

    • 通过 CSP 限制脚本的来源,防止恶意脚本的执行。
    • 示例:
      Content-Security-Policy: script-src 'self';
      

总结

JSONP 是一种过时的跨域技术,存在较大的安全风险。建议优先使用 CORS 等更安全的替代方案。如果必须使用 JSONP,务必严格验证输入、限制敏感数据,并采取其他安全措施来降低风险。


http://www.kler.cn/a/599561.html

相关文章:

  • Thinkphp(TP)框架漏洞攻略
  • HarmonyOS NEXT (六):系统安全架构
  • 内核中的互斥量
  • 《Python实战进阶》第31集:特征工程:特征选择与降维技术
  • 【蓝桥杯】每日练习 Day10
  • 平芯微PW2606过压保护芯片应用电路
  • 第二阶段面试题
  • 安宝特分享 | AR眼镜技术解析:B端与C端应用场景与设计差异
  • MediaPipe软件包如何构建和安装
  • Simula语言的安全开发
  • 嵌入式八股文学习笔记——C++学习笔记面向对象相关
  • 质检LIMS系统在临床试验机构的实践 临床试验的LIMS应用突破
  • Java实习生面试题(2025.3.23 be)
  • 安宝特分享|AR智能装备赋能企业效率跃升
  • redis7.4.2单机配置
  • CentOS 7 更换 yum 源(阿里云)+ 扩展 epel 源
  • 蓝桥杯备考:图的遍历
  • linux去掉绝对路径前面部分和最后的/符号
  • Proteus8打开Proteus7文件(.DSN格式)的方法
  • PyTorch Lightning工业级训练实战