MDN may have intermittent access issues April 18 13:00 - April 19 01:00 UTC. See whistlepig.mozilla.org for all notifications.

mozilla

版本 251567 / 在扩展中下载JSON和JavaScript

  • 版本网址缩略名: 在扩展中下载JSON和JavaScript
  • 版本标题: 在扩展中下载JSON和JavaScript
  • 版本 id: 251567
  • 创建于:
  • 创建者: Laser
  • 是否是当前版本?
  • 评论 /* 下载 JSON */
标签: 

修订内容


在很多扩展中常见的用法是使用XMLHttpRequest(或者其他机制)从一个远程的网站下载 JavaScript 或者JSON(这两者是不同的!)一旦内容下载完成,扩展的作者就会使用 eval() 继续进行解码的工作,把字串内容转换成 JavaScript 对象。这样的做法是非常危险的,并且,实际上不会通过AMO的审核。所以这样的扩展将不会被允许离开AMO的砂箱。

这种做法是危险的是因为解码后的 JavaScript 具有全部的 chrom 权限并且可以执行一些很恶劣的动作.一个扩展下载下来的JavaScript如何能执行恶劣的动作?如果承载 JavaScript 的网络服务器被劫持了或者被攻陷了,那就很容易了。这种情况是有可能发生的。AMO很认真地看待这种危险。

好消息是我们有很多方法来绕开这个问题。

下载 JSON

如果扩展是需要下载JSON,那么开发人员应该使用在这里讨论过的某种JSON解码方法,而千万不要使用eval() 。JSON是有关状态的,并不允许解码函数。扩展开发人员可用的JSON解码方法保护了扩展免于受到恶意的JSON和JavaScrip的侵害。从远端的服务器通过JSON下载状态变得日益流行。使用JSON解码器,而不是eval()

下载 JavaScript

Of course there are times when JavaScript code modules are downloaded and injected into the extension. This usually happens because the extension is trying to keep some of its code fresh and dynamic, and the developers don't want to create a new version of the extension for each script change. In this case, JavaScript sandboxing should be used to isolate the downloaded JavaScript from the rest of the extension, and host application.

Sandboxing is done using Components.utils.evalInSandbox(). The JavaScript code is added to the sandbox along with any "safe" objects the JavaScript needs to interact. Sandboxing is not without its dangers and developers should read the sandboxing page carefully to make sure untrusted code is not leaked out of the sandbox.

{{ wiki.languages( { "en": "en/Downloading_JSON_and_JavaScript_in_extensions" } ) }}

修订版来源

<p><br>
在很多扩展中常见的用法是使用<a href="cn/XMLHttpRequest">XMLHttpRequest</a>(或者其他机制)从一个远程的网站下载 JavaScript 或者<a href="cn/JSON">JSON</a>(这两者是不同的!)一旦内容下载完成,扩展的作者就会使用 <code><a href="cn/Core_JavaScript_1.5_Reference/Functions/eval"> eval()</a></code> 继续进行解码的工作,把字串内容转换成 JavaScript 对象。这样的做法是<b>非常危险</b>的,并且,实际上不会通过<a class="external" href="http://addons.mozilla.org">AMO</a>的审核。所以这样的扩展将不会被允许离开AMO的砂箱。
</p><p>这种做法是危险的是因为解码后的 JavaScript 具有全部的 chrom 权限并且可以执行一些很恶劣的动作.一个扩展下载下来的JavaScript如何能执行恶劣的动作?如果承载 JavaScript 的网络服务器被劫持了或者被攻陷了,那就很容易了。这种情况是有可能发生的。AMO很认真地看待这种危险。
</p><p>好消息是我们有很多方法来绕开这个问题。
</p>
<h3 name=".E4.B8.8B.E8.BD.BD_JSON">下载 JSON</h3>
<p>如果扩展是需要下载JSON,那么开发人员应该使用在<a href="cn/JSON">这里</a>讨论过的某种JSON解码方法,而千万不要使用<code>eval()</code> 。JSON是有关状态的,并不允许解码函数。扩展开发人员可用的JSON解码方法保护了扩展免于受到恶意的JSON和JavaScrip的侵害。从远端的服务器通过JSON下载状态变得日益流行。使用JSON解码器,而不是<code>eval()</code>!
</p>
<h3 name=".E4.B8.8B.E8.BD.BD_JavaScript">下载 JavaScript</h3>
<p>Of course there are times when JavaScript code modules are downloaded and injected into the extension. This usually happens because the extension is trying to keep some of its code fresh and dynamic, and the developers don't want to create a new version of the extension for each script change. In this case, JavaScript sandboxing should be used to isolate the downloaded JavaScript from the rest of the extension, and host application.
</p><p>Sandboxing is done using <code><a href="cn/Components.utils.evalInSandbox">Components.utils.evalInSandbox()</a></code>. The JavaScript code is added to the sandbox along with any "safe" objects the JavaScript needs to interact. Sandboxing is not without its dangers and developers should read the sandboxing page carefully to make sure untrusted code is not leaked out of the sandbox.
</p>{{ wiki.languages( { "en": "en/Downloading_JSON_and_JavaScript_in_extensions" } ) }}
恢复到这个版本