6

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

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

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

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

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

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

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

4

4 回答 4

1

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

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

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

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

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

于 2012-12-07T18:08:14.260 回答
1

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

于 2012-12-07T19:06:52.427 回答
0

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

但是你仍然需要担心基于 DOM 的 xssClickjacking

于 2012-12-07T21:53:20.080 回答
0

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

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

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

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

于 2019-05-22T02:56:54.583 回答