JSON / JSONP如何用于(;;);在响应机构中

时间:2012-09-26 20:19:59

标签: javascript json jsonp google-closure-library

我似乎无法找到忽略我的跨域JSONP请求的响应正文中的for(;;);的方法。我在自己的服务器上这样做,这里没有别的事。我试图将for(;;);包含在我的回调的响应主体中:

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

但是如何在解析JS代码之前将其从响应主体中删除?我正在使用Google Closure Library btw。

1 个答案:

答案 0 :(得分:1)

好的,我想我明白了。 之所以为(;;);是否有防止某些信息的跨域数据请求。所以基本上如果你有想要保护的信息,你可以通过一个普通的Ajax JSON通道,如果你在多个服务器上存储数据,你可以在服务器级别处理它。

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

所以正常的实现方法如下:

  1. 将普通的Ajax请求发送到位于同一服务器上的文件。
  2. 执行服务器级别的内容并通过加密的CURL向外部服务器发送请求。
  3. 为服务器响应添加安全性(for(;;);while(1);throw(1);后跟<prevent eval statements>字符串。
  4. 以文本字符串形式获取响应。
  5. 从字符串中删除安全实现。 使用标准JSON解析器将字符串(现在是“JSON字符串”)转换为JS对象/数组等。
  6. 做任何你想做的数据。
  7. 我以为我应该把它放在这里以防万一其他人将来谷歌它,因为我没有通过谷歌找到适当的信息。这有助于防止跨域请求伪造。