我似乎想不出一种方法来忽略跨域JSONP请求的响应体中的for(;;);
。我在自己的服务器上做这件事,这里没有其他事情。我正试图将for(;;);
包含在回调的响应体中,如下所示:
_callbacks_.callback(for(;;);[jsondata....]);
但是如何在解析JS代码之前将其从响应体中删除呢?我正在使用谷歌关闭库btw.
好吧,我想我已经想通了。为(;;);是为了防止某些信息的跨域数据请求。因此,基本上,如果您有要保护的信息,您将通过一个普通的Ajax JSON通道,如果您将数据存储在多个服务器上,您将在服务器级别处理它。
JSONP请求实际上是一个远程脚本包含,这意味着无论服务器输出什么都是实际的Javascript代码,所以如果在_callbacks_.callback();
之前有for(;;);
,那么在请求成功时,代码将在源域上执行。如果它是一个无限for循环,它显然会阻塞页面。
因此,正常的实现方法如下:
- 向位于同一服务器上的文件发送一个普通的Ajax请求
- 执行服务器级别的工作,并通过加密的CURL向外部服务器发送请求
- 为服务器响应添加安全性(后面跟着
<prevent eval statements>
字符串的for(;;);
或while(1);
或throw(1);
) - 获取作为文本字符串的响应
- 从字符串中删除您的安全实现。使用标准JSON解析器将字符串(现在是"JSON字符串")转换为JS Object/Array等
- 对数据做任何你想做的事情
我只是觉得我应该把这个放在这里,以防将来有人用谷歌搜索它,因为我没有通过谷歌搜索找到合适的信息。这将有助于防止跨域请求伪造。