2011-03-07 56 views
0

havebeenmanyproposals增强JSONP通信的安全性 - 其中一些未能理解这一点。按照现在的情况,当向某个提供者发出JSONP请求时,他必须相信提供者实际返回包含在回调中的一些JSON数据。那么,实际上,相信提供商将anything包装到期望的回调中就足够了:我们可以使用JSON.parse来确保anything是有效的JSON。无论如何,没有任何东西阻止提供者简单地忽略回调并返回恶意脚本。JSONP安全性的状态

使机制安全的唯一方法是在客户端添加一些增强功能。客户端不应该盲目地插入脚本,而应该在之前解析它。实质上,这是许多提案所倡导的,但这当然需要来自浏览器供应商的一些协作。所以我们来我的问题

是否有任何具体的建议从一些浏览器供应商实现这样的机制?

回答

2

在具有CORS支持的浏览器中使用跨域XHR请求可能会最终解决该问题。通过XHR而不是脚本注入来引发响应可以防止不必要的代码执行,并且(如您所提到的)JSON.parse()可以用于解释/验证JSON响应。

+0

是的,我知道CORS,但它似乎目前还不是很普遍。另一方面,JSONP现在在这里,它似乎不是一个很好的模型。 – Andrea 2011-03-07 16:42:34

+0

所有主流浏览器都支持CORS的新版本。 CORS正在获得牵引力。 JSONP是一种可以在CORS更广泛使用之前使用的黑客技术。尝试改进浏览器对黑客的支持毫无意义。 – 2011-03-07 17:02:00

+0

@Andrea:对,但CORS已经在浏览器生态系统中进行筛选。这将是你可以更快地依赖的东西,而不是对JSONP的更新更改,IE10,Firefox 5,Chrome 25等之前不会进入生态系统。 – 2011-03-07 17:34:46