JSONP相关知识学习

对全网上一些JSONP蜜罐探索与识别 - ph4nt0mer - 博客园 (cnblogs.com)

什么是jsonp

JSONP(JSON with Padding)是JSON的一种”使用模式“,可用于解决主流浏览器的跨域数据访问的问题。

原理

实现原理

  • 由于浏览器同源策略限制,网页无法通过Ajax请求非同源的接口数据。
  • script标签不受浏览器同源策略的影响,可以通过src属性,请求非同源的js脚本数据。
  • 通过函数调用的形式,接收跨域接口响应回来的数据。

攻击原理

Abuse of JSONP

If you find a JSONP interface you could be able to call an arbitrary function with arbitrary data:

1
2
3
4
5
6
7
8
9
<script src='/editor/sharing.js'>:              ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}

<script src='/search?q=a&call=set_sharing'>: ← Injected JSONP call
set_sharing({ ... })

Or you can even try to execute some javascript:

1
<script src='/search?q=a&call=alert(1)'></script>

防御方法

限制来源referer
按照JSON格式标准输出(设置Content-Type : application/json; charset=utf-8),预防http://127.0.0.1/getUsers.php?callback=形式的xss

参考

对全网上一些JSONP蜜罐探索与识别 - ph4nt0mer - 博客园 (cnblogs.com)