安全问题允许用户将自己的JavaScript添加到您的网站?

Yah*_*din 4 javascript security

我打算创建一个开源教育网络应用程序,人们可以在其中添加和编辑内容(有点像维基百科).

但是,我希望添加另一个功能,允许用户使用JavaScript添加自己的交互式内容.(类似JSFiddle的做法)

这样做有哪些安全问题?可选问题:如何克服这些问题?

Sil*_*Fox 7

是的,您可以使用HTML5 Sandbox仅加载IFrame中的用户脚本.

您应该只托管来自与主站点不同的域的用户内容.如果攻击者诱使用户直接访问该页面(在沙箱之外),这将阻止任何XSS攻击.例如,如果您的站点是www.example.com您可以使用以下代码来显示沙盒IFrame:

<iframe src="https://www.foo.com/show_user_script.aspx?id=123" sandbox="allow-scripts"></iframe>
Run Code Online (Sandbox Code Playgroud)

这将允许脚本,但将阻止IFrame之外的表单和导航.

关于OWASPHTML5安全备忘单指南说明这是沙箱的目的:

将iframe的sandbox属性用于不受信任的内容

在渲染IFrame之前,您应该首先测试是否支持沙箱:

<iframe src="/blank.htm" sandbox="allow-scripts" id="foo"></iframe>
Run Code Online (Sandbox Code Playgroud)
var sandboxSupported = "sandbox" in document.createElement("iframe");

if (sandboxSupported) {
    document.getElementById('foo').setAttribute('src', 'https://www.foo.com/show_user_script.aspx?id=123');
}
else
{
    // Not safe to display IFrame
}
Run Code Online (Sandbox Code Playgroud)

它是安全通过动态地改变,以这样来做src,而不是重定向的路程,如果sandboxSupportedfalse因为这样的iframe不小心就会被如果重定向不及时发生呈现.

正如@Snowburnt所触及的那样,没有什么能阻止用户脚本将用户重定向到发生偷渡式下载的站点,但这种方法假设用户是最新的补丁,并且没有零日漏洞,这是一种安全的方法,因为它通过相同的原始策略保护其最终用户及其网站上的数据.