【问题标题】:Lets solve cross-domain ajax, totally on the client, using script tags让我们使用脚本标签完全在客户端解决跨域 ajax
【发布时间】:2010-10-07 18:32:39
【问题描述】:

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

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

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: javascript ajax cross-domain eval


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我倾向于说离开它。这类问题将得到解决,但不是通过破解我们已有的东西。在这方面,网络从根本上被破坏了。来自一个域的任何脚本都可以在另一个域上执行这一事实是一个严重的安全漏洞,如果不加以检查,将会阻碍网络的发展。

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

      【讨论】:

      • 如果来自一个域的脚本无法在另一个域中执行,我们如何才能拥有基于网络的交互式广告?!正如我们所知,您是在暗示互联网的终结!
      • 我的意思是脚本应该需要权限才能在其他域上运行。目前,任何从脚本标签链接到的 JS 文件都会执行。
      【解决方案3】:

      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 将获得直接影响控制流的能力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        相关资源
        最近更新 更多