Javascript 是否可以发出安全的JSONP请求?

Javascript 是否可以发出安全的JSONP请求?,javascript,jsonp,Javascript,Jsonp,我只需要支持 我必须依赖外部服务来提供JSONP数据,我不拥有该服务,它也不允许 我感到非常不安,不得不信任来自外部服务器的JSONP请求,因为它们可以在我的终端上运行任意代码,这将允许它们跟踪我的用户,甚至窃取他们的信息 我想知道是否有任何方法可以创建一个同样安全的JSONP请求 (相关:但不适用于新浏览器) 注意:我以问答的方式提问/回答,但我对其他想法非常开放。是的 这是可能的。一种方法是使用。WebWorkers中运行的代码无法访问页面正在运行的DOM或其他JavaScript代码 您可

我只需要支持

我必须依赖外部服务来提供JSONP数据,我不拥有该服务,它也不允许

我感到非常不安,不得不信任来自外部服务器的JSONP请求,因为它们可以在我的终端上运行任意代码,这将允许它们跟踪我的用户,甚至窃取他们的信息

我想知道是否有任何方法可以创建一个同样安全的JSONP请求

(相关:但不适用于新浏览器)

注意:我以问答的方式提问/回答,但我对其他想法非常开放。

是的

这是可能的。一种方法是使用。WebWorkers中运行的代码无法访问页面正在运行的DOM或其他JavaScript代码

您可以创建一个WebWorker并使用它执行JSONP请求,然后在完成后终止它

过程是这样的:

  • 从具有要请求的URL的blob创建WebWorker

  • 使用
    importScripts
    加载带有本地回调的JSONP请求

  • 当执行回调时,将消息发回脚本,脚本将使用数据执行实际的回调消息

这样,攻击者就不会有关于DOM的任何信息

以下是一份:

以下是在JSFIDLE中使用的示例用法:

jsonp("http://jsfiddle.net/echo/jsonp", {
    "hello": "world"
}, function (response) {
    alert(response.hello);
});
此实现不处理其他一些问题,但它阻止了对DOM或页面上当前JavaScript的所有访问,您可以创建一个

这应该适用于IE10+、Chrome、Firefox和Safari以及移动浏览器

jsonp("http://jsfiddle.net/echo/jsonp", {
    "hello": "world"
}, function (response) {
    alert(response.hello);
});