我想知道使用以下 JSONP 响应语法的原因是什么:
在 URL 下:https ://ect.channel.facebook.com/probe?mode=stream&format=json
有:
for (;;); {"t":"heartbeat"}
{"t":"heartbeat"}
{"t":"continue","seq":0}
for(;;);
我的问题是,这个 JSONP 响应到底做了什么。它是如何解析的?
我想知道使用以下 JSONP 响应语法的原因是什么:
在 URL 下:https ://ect.channel.facebook.com/probe?mode=stream&format=json
有:
for (;;); {"t":"heartbeat"}
{"t":"heartbeat"}
{"t":"continue","seq":0}
for(;;);
我的问题是,这个 JSONP 响应到底做了什么。它是如何解析的?
这不是 JSONP;它是 JSON,如果用作 JSONP,它会被故意修改为失败。
如果您在标签中包含该 URL <script>
,它会将浏览器冻结在无限for
循环中。
这可以防止攻击者将其包含在外部站点中并调用Object.defineProperty
以创建 setter 函数并绕过 SOP。
这是出于安全原因。JSONP实际上不是JSON,它是一个执行的 JavaScript 文件。
它就for(;;);
在那里,因此如果人们(Facebook 以外的人)试图访问该文件,他们就无法访问。
注意:这不是 JSONP,但您的浏览器不知道。它会尝试运行它,然后陷入无限循环。