2012-09-26 16 views
1

我似乎无法找到一种方法来忽略我的跨域JSONP请求的响应正文中的for(;;);。我在我自己的服务器上这样做,没有其他任何事情在这里。我想包括for(;;);我的回调的响应体内这样:JSON/JSONP如何使用(;;);在恢复正文

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

但如何从响应体中取出的JS代码被分析之前?我正在使用谷歌关闭库btw。

+0

这是一个语法错误?不,你不能编辑JSONP代码repsonses。谁包括这个,是你的服务器? – Bergi

回答

1

好吧我想我想通了。 (;;);的原因是否有防止某些信息跨域数据请求。所以基本上,如果你有信息,你试图保护你通过一个正常的Ajax JSON频道,如果你在多台服务器上存储数据,你在服务器级别处理它。

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

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

  1. 发送一个正常的Ajax请求位于同一台服务器上的文件。
  2. 执行服务器级别的东西并通过加密CURL将请求发送到外部服务器。
  3. 添加安全服务器响应(for(;;);while(1);throw(1);后跟一个<prevent eval statements>字符串。
  4. 得到的回应为文本字符串。
  5. 从字符串中删除您的安全实现。 将字符串(其现在是一个“JSON字符串”),以一个JS对象/数组等与标准JSON解析器。
  6. 做你想做的数据做。

只是想我应该把这个在这里以防其他人将来使用Google,因为Google没有找到适当的信息。这应该有助于防止跨域请求伪造。