让我们使用脚本标签完全在客户端上解决跨域ajax

时间:2009-02-15 18:35:25

标签: javascript ajax cross-domain eval

我知道,有JSONP,它涉及服务器合作以命名空间数据。

令我困扰的是,脚本标记src的内容已评估,但 NOT 可供阅读。

<script src="http://www.google.com"></script>

我们需要弄清楚的是如何命名数据,这就是全部。 当然,我尝试了相当没有相关结果的非常愚蠢的事情(我知道这不起作用,但你可以看到我想要实现的目标):

<script>eval('var namespace="');</script>
<script src="http://www.google.com"></script>
<script>eval('";');</script>

由于关于src内容的评估方式确实没有相关信息,我知道它的全局范围,但是如果我们能够以某种方式跟踪评估步骤或者 evals范围(不多)关于这一点的文档),我们可以解决这个烦人的“已评估但不可读”的事情。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

由于浏览器安全策略,我不确定这是否完全可能。

答案 1 :(得分:1)

HTML5提供了window.postMessage,它提供了一种安全的跨域消息传递机制,并得到Firefox 3,Opera 9.6和WebKit nightlies的支持。

那说上面的建议无法奏效,因为它需要与javascript eval完全不同的行为。 eval解析并执行当前上下文中的给定字符串 - 您要求的是eval更改包含函数的实际代码。例如

 for (var i = 0; i < 10; i++) eval("; doSomething();");

会变成

 for (var i = 0; i < 10; i++) ; doSomething();;

意味着for循环变为空,doSomething只会被调用一次。显然,这将导致非常难以理解语义,并且使得使用它的安全性大大降低,因为eval将获得直接影响控制流的能力。

答案 2 :(得分:0)

我倾向于说离开它。这些问题将得到解决,但不能通过黑客攻击已有的问题。在这方面,网络从根本上被打破。来自一个域的任何脚本都可以在另一个域上执行的事实是一个严重的安全漏洞,如果不加以控制将阻碍Web的增长。

http://www.slideshare.net/webdirections/douglas-crockford-ajax-security-presentation