常见漏洞验证121 条

JSONP 风险检查

JSONP 接口以回调参数包裹数据且天然跨域可读;检查是否仍存在敏感数据的 JSONP 输出与回调名校验缺失。

JSONP 为什么是风险面

JSONP 通过 callback 参数把数据包裹成脚本片段返给浏览器,因此任何站点都能通过 script 标签跨域读取返回内容——这是设计使然,不是配置失误。风险在于它常被用在带登录态的接口上:用户在浏览器里的会话会让 JSONP 返回本人数据,而读取方可以是任意第三方页面。新接口不应再使用 JSONP,存量接口需要收缩到无敏感数据场景并严格校验回调名。

基本信息

适用平台遗留 Web 前端与老版本开放接口
识别特征接口含 callback/cb/jsonp 参数,返回包裹式脚本文本
风险本质跨域可读,且可能携带用户登录态数据
参考标准OWASP WSTG-CLNT-12、CWE-79 相关实践

典型使用场景

  • 老系统接口资产梳理时识别遗留 JSONP 端点
  • 评估登录态接口是否同时提供了跨域可读的 JSONP 出口
  • 排查回调名未校验导致的可注入脚本问题
  • 为前端改造(迁移到 CORS)提供影响面清单
  • 核查第三方合作方是否仍在调用 JSONP 接口

检查步骤

检查步骤
1. 从接口清单与前端代码中收集含 callback/cb/jsonp 参数的端点
2. 用自有测试页面尝试跨域读取(只读取测试账号自身的数据)
3. 检查回调名是否允许任意字符(特殊符号进入响应体会形成脚本注入)
4. 对比返回内容:是否包含超出前端展示需要的信息
5. 记录端点、返回数据类型与是否携带会话信息,输出改造建议

检查点与判据

检查点正常状态风险表现
接口是否仍在使用已迁移到 CORS 或新方案大量遗留端点在网
数据敏感度仅公开非敏感数据带登录态返回用户数据
回调名校验严格白名单字符集任意字符可注入响应体
会话依赖不依赖 Cookie 鉴权跨域请求自动携带登录态
调用方识别有明确合作方登记无登记也无法关闭
修复视角:新接口一律不用 JSONP,改用按来源白名单配置的 CORS;存量接口收缩到无敏感数据场景,并把回调名限制为字母数字与下划线的白名单字符集。
用公开数据端点测试会得出“无风险”的错误结论:判断时必须确认该端点在携带会话时是否返回用户相关数据。

易错点

  • 用公开数据接口做验证得出“无风险”结论,忽略同一实现在登录态下的返回内容
  • 只关注数据泄露,漏掉回调名未校验造成的响应体脚本注入
  • 把 JSONP 与 CORS 混为一谈,修复方案改成“加 Access-Control-Allow-Origin: *”反而放大问题
  • 未登记调用方就直接下线接口,影响仍在依赖该接口的合作方业务
  • 只按参数名扫描,漏掉以路径形式提供 JSONP 输出的端点

数据来源与参考

  • OWASP WSTG WSTG-CLNT-12
  • CWE-79 相关实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌