【问题标题】:Sandboxed Javascript Execution in an Internet Explorer Extension (BHO)Internet Explorer 扩展 (BHO) 中的沙盒 Javascript 执行
【发布时间】:2010-01-08 18:22:53
【问题描述】:

Firefox 有 Sandbox 和 evalInSandbox()。 Chrome 在其内容脚本中具有沙盒执行(他们称之为隔离执行)。我正在 IE 浏览器扩展中寻找同样的东西。

我可以加载一个 javascript 文件,然后调用 evalScript(),但代码在与页面上存在的 javascript 相同的环境中执行。我需要一种在沙盒/隔离环境中运行我的库(包括并基于 jQuery)的方法,但仍然允许它修改 DOM,就好像它在页面上运行一样。

Jint 看起来很有前途,但目前无法评估 jQuery。 (他们可以解析它。)

我该怎么做?

【问题讨论】:

  • Chrome 的孤立世界:code.google.com/chrome/extensions/… "内容脚本在称为孤立世界的特殊环境中执行。它们可以访问被注入页面的 DOM,但不能访问任何 JavaScript 变量或函数由页面创建。”
  • Firefox 的 evalInSandbox:developer.mozilla.org/En/Components.utils.evalInSandbox GreaseMonkey 使用此方法允许在页面上下文之外执行 javascript。将 DOM 作为变量传递允许脚本修改 DOM,而不允许页面的 javascript 访问它自己的方法和变量。这确实允许沙盒代码植入脚本标签并在主页中加载内容,但阻止这不是我关心的问题。
  • 我不相信 evalInSandbox 真的像你想象的那样工作;请参阅安全部分中的代码示例。虽然我不是专家,但我的理解是 evalInSandbox 主要用于允许 JS 在完全信任的 Chrome 区域中执行,而不是在活动文档的有限信任区域中执行。
  • 我想每个人都只是害怕告诉你他们不知道你的问题的答案。它们不是答案。我也没有,但我只是说'

标签: javascript jquery internet-explorer sandbox bho


【解决方案1】:

看起来你对这个很感兴趣。

  • 一些微软人士说 IE 不提供此功能
  • 有些人说他们已经能够把它拉下来,把它紧紧握住,作为他们的秘诀保护它
  • “专业的”IE 扩展商店,当被联系到构建您所说的内容时,拒绝工作

我真的希望我有更好的消息,但看起来可能需要一个小小的奇迹来完成你正在寻找的东西......或者可能需要很多钱。 :)

你最好的选择可能是找到少数声称自己能够做到的人之一,并付给他们很多钱来分享秘密或重新考虑为什么你真的想要你想要的东西,看看你是否做不到以另一种方式完成它。

【讨论】:

    【解决方案2】:

    您可能会发现值得一看 Live Labs 的 Microsoft Web Sandbox: http://websandbox.livelabs.com/

    虽然它更成熟并且与混搭等相关,但它可能会为您指明正确的方向。

    【讨论】:

    • Microsoft Web Sandbox 保护页面免受加载到其中的脚本的影响。我需要保护加载的脚本不受页面影响。这是一个很好的项目,但在这里对我没有帮助。
    【解决方案3】:

    您正在寻找的是 ActiveScript 引擎 (http://en.wikipedia.org/wiki/Active_Scripting)

    我现在找不到任何有用的链接,MSDN 只包含接口定义 (http://msdn.microsoft.com/en-us/library/ccd0zt2w(v=vs.85).aspx) 尝试谷歌“Active Scripting”(不是“Action Scripting”!)

    您需要在您的扩展中实现接口IActiveScriptHost,创建一个«JScript»对象,调用SetSite并传递您的主机对象,然后您可以将您的js代码加载到这个引擎中并运行它。

    由于缺乏有关它的文档,这项技术非常困难。 如果你仍然对此感兴趣,我可以给你发一些 C++/ATL 的例子。

    【讨论】:

    • 如果你可以在这里放一个示例代码,也许在 GitHub 上会很有帮助。特别是因为就像你说的那样 - 文档很少。
    【解决方案4】:

    你能详细说明一下你的目标吗?

    我认为您没有明确定义您要完成的任务。如果您的代码能够修改页面的 DOM,那么它实际上正在在页面的上下文中执行。它可以创建新的脚本块来执行它可以完成的任何不安全或不可靠的操作,如果它在相同的执行环境中运行。

    IE 没有提供功能来满足您的要求,而且我不相信 Firefox 和 Chrome 的功能会按照您期望的方式工作。

    【讨论】:

    • 我的目标包括在页面上运行 javascript,但页面的 javascript 无法访问我的 javascript 方法和变量。我还想要一份新的 javascript 副本。如果页面在 javascript 中重新定义了一个方法,我不想受制于它们的重新定义。我不担心我的脚本能够在 DOM 中植入脚本标签以跳出沙箱。我所描述的内容在 Firefox 和 Chrome 中可用。我将发布相关文档的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多