Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌入式javascript和HTML中的安全性_Javascript_Ajax_Security_Embedding - Fatal编程技术网

嵌入式javascript和HTML中的安全性

嵌入式javascript和HTML中的安全性,javascript,ajax,security,embedding,Javascript,Ajax,Security,Embedding,我正试图找到以下情况的解决方案: 我有一个web应用程序,由HTML、javascript、AJAX和广告等组成 我希望用户为我的应用程序/网站贡献力量,创建插件,该插件将嵌入其中 这个插件将使用类似的技术(ajax、HTML等)创建,因此我需要允许插件运行自己的javascript代码 每个插件将在一个页面中工作,该页面将包含一些用户信息和插件(如旧的fbml facebook应用程序) 问题是,通过这种方式,插件还可以调用来获取用户信息。(因为插件的代码是嵌入的,所以它的域将与主网站相同

我正试图找到以下情况的解决方案:

  • 我有一个web应用程序,由HTML、javascript、AJAX和广告等组成
  • 我希望用户为我的应用程序/网站贡献力量,创建插件,该插件将嵌入其中
  • 这个插件将使用类似的技术(ajax、HTML等)创建,因此我需要允许插件运行自己的javascript代码
  • 每个插件将在一个页面中工作,该页面将包含一些用户信息和插件(如旧的fbml facebook应用程序)
问题是,通过这种方式,插件还可以调用来获取用户信息。(因为插件的代码是嵌入的,所以它的域将与主网站相同,代码将完全在我的网站上)

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

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

我愿意接受任何建议,可能简单有效,而且可能不会将整个插件放在iframe中

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

您听说过允许任意代码执行的漏洞攻击吗。哪一次是最危险的袭击

在这种情况下,您可以显式地、自愿地允许任意代码执行,并且几乎没有办法对其进行沙盒处理

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

请注意,如果您希望插件从此域与您的服务通信,那么它将是跨域通信。因此,您要么需要求助于JSONP,要么使用新的跨域访问控制规范。(即,在web服务响应中返回适当的头——访问控制允许源“plugins.domain.com”)


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

Facebook创造了自己的“JavaScript”,它通过控制可以运行的内容来实现沙箱

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


然而,你仍然需要担心,而且已经过去了6年,但我觉得为这个问题提供一个现代化的解决方案很重要。新的(er)
sandbox
属性可用于限制IFrame的功能

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

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


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

如果您正在制作一个将在同一页面上执行的插件,恐怕您无能为力。即使你可以,它也不会成为一个非常有用的插件系统。你必须找到一种方法来信任正在使用的代码。这个问题有点像问不可能!允许在页面/域内执行任意javascript代码而不进行任何检查/任何操作都会引发各种安全问题。Thansk,你的回答可以帮助我澄清情况,现在我正在寻找类似google caja的解决方案: