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

时间:2014-01-19 15:43:02

标签: javascript security

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

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

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

2 个答案:

答案 0 :(得分: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>

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

HTML5 Security Cheat Sheet guidance on OWASP表明这是沙箱的目的:

  

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

在呈现IFrame之前,您应首先测试是否支持沙箱:

<iframe src="/blank.htm" sandbox="allow-scripts" id="foo"></iframe>
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
}

通过动态更改src而不是在sandboxSupportedfalse时重定向,这样做更安全,因为如果重定向不会导致iframe不会被意外呈现及时发生。

@Snowburnt触及时,没有什么能阻止用户脚本将用户重定向到发生drive-by download的网站,但这种方法假设用户是最新的补丁,并且没有zero day个漏洞,这是一种安全的方法,因为它通过same origin policy保护其最终用户及其网站上的数据。

答案 1 :(得分:1)

一个大问题是跨站点脚本,用户添加的代码告诉浏览器打开并运行其他站点的代码。假设他们添加一些东西,创建指向网站的iFrame或隐藏的iFrame,并开始下载恶意代码。

没有简单的方法(感谢评论中的Bergi)确保没有创建任何元素并且没有进行ajax调用。

我一直是提供此功能的网站的成员,但是对于那些我为自己的空间付费的网站,所以我添加的任何漏洞都会给我自己的客户带来不便,在这种情况下,通过这种方式可以让它更加轻松因为这不是每个人的安全漏洞。

解决此问题的一种方法是为用户创建可自定义的控件以用于添加交互性。优点是您控制正在添加的javascript,减号是您的用户群必须请求然后等待您创建它们。

相关问题