JSON/JSONP如何使用for(;;);在呼吸体中



我似乎想不出一种方法来忽略跨域JSONP请求的响应体中的for(;;);。我在自己的服务器上做这件事,这里没有其他事情。我正试图将for(;;);包含在回调的响应体中,如下所示:

_callbacks_.callback(for(;;);[jsondata....]);

但是如何在解析JS代码之前将其从响应体中删除呢?我正在使用谷歌关闭库btw.

好吧,我想我已经想通了。为(;;);是为了防止某些信息的跨域数据请求。因此,基本上,如果您有要保护的信息,您将通过一个普通的Ajax JSON通道,如果您将数据存储在多个服务器上,您将在服务器级别处理它。

JSONP请求实际上是一个远程脚本包含,这意味着无论服务器输出什么都是实际的Javascript代码,所以如果在_callbacks_.callback();之前有for(;;);,那么在请求成功时,代码将在源域上执行。如果它是一个无限for循环,它显然会阻塞页面。

因此,正常的实现方法如下:

  1. 向位于同一服务器上的文件发送一个普通的Ajax请求
  2. 执行服务器级别的工作,并通过加密的CURL向外部服务器发送请求
  3. 为服务器响应添加安全性(后面跟着<prevent eval statements>字符串的for(;;);while(1);throw(1);)
  4. 获取作为文本字符串的响应
  5. 从字符串中删除您的安全实现。使用标准JSON解析器将字符串(现在是"JSON字符串")转换为JS Object/Array等
  6. 对数据做任何你想做的事情

我只是觉得我应该把这个放在这里,以防将来有人用谷歌搜索它,因为我没有通过谷歌搜索找到合适的信息。这将有助于防止跨域请求伪造。

最新更新