【问题标题】:Security in embedded javascript and HTML嵌入式 javascript 和 HTML 的安全性
【发布时间】:2012-12-07 17:59:26
【问题描述】:

我正在尝试为以下情况寻找解决方案:

  • 我有一个由 HTML、javascript、AJAX、广告等组成的网络应用程序
  • 我希望用户为我的应用程序/网站做出贡献,创建将嵌入其中的插件
  • 此插件将使用类似的技术(ajax、HTML 等)创建,因此我需要允许插件运行自己的 javascript 代码。
  • 每个插件都将在包含一些用户信息和插件的页面中运行(如旧的 fbml facebook 应用程序)

问题在于,通过这种方式,插件还可以发出调用以获取用户信息。 (因为插件的代码是嵌入的,它的域将与主网站相同,并且代码将完全在我的网站上)。

所以问题是:我怎样才能避免它并精确控制插件可以获得哪些关于用户的信息?

插件不会被检查,可以随时更改,因此阅读所有插件代码不是解决方案。

我对任何建议持开放态度,可能简单有效,也可能不会将整个插件放在 iframe 中。

-- 编辑: 当有创建应用程序的旧方法时,Facebook 是如何做的? (现在只有iframe,但是有FBML应用方式,他们是怎么做到的?)

【问题讨论】:

  • 如果您正在制作一个将在同一页面上执行的插件,恐怕您无能为力。即使可以,它也不会成为一个非常有用的插件系统。您必须找到一种方法来信任所使用的代码。
  • 这个问题有点像问how safe is Greasemonkey?
  • 不可能!允许在您的页面/域内执行任意 javascript 代码而无需任何检查/会引发各种安全问题。

标签: javascript ajax security embedding


【解决方案1】:

您是否听说过允许任意代码执行的漏洞。哪种攻击是最危险的?

好吧,在这种情况下,您明确且自愿地允许任意代码执行,您几乎没有办法对其进行沙箱处理。

1) 正如您所提到的,您可以在不同子域的 iframe 中运行“插件”以将其放入沙箱中。这样插件就无法访问您的 cookie 和脚本。

请注意,如果您希望插件与来自该域的服务进行通信,那么它将是跨域通信。因此,您要么需要求助于 JSONP,要么使用新的跨域访问控制规范。 (即在您的 Web 服务响应中返回适当的标头 -- Access-Control-Allow-Origin "plugins.domain.com")

2) 创建您自己的简单脚本语言并尽可能多地公开。这显然很乏味,即使您设法做到这一点,插件开发人员也会经历一段学习曲线。

【讨论】:

【解决方案2】:

Facebook 有自己创造的“JavaScript”FBJS,它通过控制可以运行的内容来进行沙盒。

【讨论】:

    【解决方案3】:

    如果没有多汁的后端,这确实会限制脚本的影响。

    不过你还是要担心DOM based xssClickjacking

    【讨论】:

      【解决方案4】:

      6 年后,但我觉得为此提供现代解决方案很重要。 new(er) sandbox 属性可用于限制 IFrame 的功能。

      这个系统的一个简单实现将只允许 IFrame 的 allow-scripts 权限,可能使用一个简单的 JS 文件,该文件将包含在每个包含一些自定义库函数的插件中。

      为了与您的 HTML 页面进行通信,您可以使用 postMessage。在插件端,可以使用我上面提到的库来传输命令。在用户方面,另一个系统必须验证和解码这些请求,然后执行它们。

      由于沙盒 IFrame 没有跨源功能,它不能直接修改页面。但是,这也意味着无法验证postMessage 的来源,因此出于安全原因必须创建某种代码。

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 1970-01-01
        • 2012-01-15
        • 2012-02-14
        • 1970-01-01
        • 2011-02-10
        • 2016-12-27
        • 1970-01-01
        • 2019-05-18
        相关资源
        最近更新 更多