安全问题 - 允许用户添加自己的JavaScript(仅在运行时)

时间:2014-04-05 19:53:06

标签: javascript jquery security web

我目前正在开发一个内容生成器,我有一些对象允许用户向页面添加自定义脚本。

我很担心我的插件的预览。页面无法保存在预览中,但如果我允许他使用动态添加的javascript,用户是否可以永久地弄乱我的预览页面?

我还想提一下,javascript是通过AJAX发送到php文件,然后附加到正文。

3 个答案:

答案 0 :(得分:1)

  

页面无法保存在预览中,但是如果我允许他使用动态添加的javascript,用户是否可以永久地弄乱我的预览页面?

不永久,不。他只能弄乱自己当前的页面。

如果自定义脚本和页面不会离开客户端的计算机,或者您可以确保它们不会被提供给其他人(这意味着它们不会存储在服务器上)那么你就可以从XSS attacks安全了。

然而,请注意,只要您的插件离开"预览"并且您允许保存向其他访问者显示的页面,出现该问题。

答案 1 :(得分:0)

是的,这是一个名为Cross Site Scripting(XSS)的大型攻击媒介。除非绝对必须,否则不应在任意页面上运行用户提供的JavaScript。

例如,我可以添加:

document.body.style.display = 'none';

这会隐藏整个页面。

答案 2 :(得分:0)

虽然您的脚本仅向当前用户显示,但您的网页可能容易受到Cross Site Scripting攻击。在这种情况下处理它的方式(因为你允许脚本)是使用类似的机制来Cross Site Request Forgery预防(尽管CSRF和XSS完全不同)。

e.g。如果您的页面https://www.example.com/preview显示发布到它的所有内容(HTML和脚本)(例如,假设POSt参数被称为content),攻击者可能会在其页面上包含以下代码,然后诱使受害者在登录您的网站时访问它。

www.evil.com上: -

<form method="post" action="https://www.example.com/preview">

<input type="hidden" name="content" value="<script>alert('foo');</script>" />

</form>

此表单可以通过JavaScript(document.forms[0].submit())自动提交。

这将导致content中的脚本在您的站点上下文中执行,可能会将用户会话的cookie值传递给www.evil.com,而不是我的警告框的良性示例。

但是,当您使用AJAX将content值发布到您自己的站点时,可以通过检查X-Requested-With请求标头是否设置为XMLHttpRequest来阻止此攻击。此标头cannot be POSTed cross domain(您的服务器未使用CORS同意此内容。)

另外,如果您的页面用于预览 - 如果您的预览无法保存,预览会是什么?如果这与您的完整保存功能相关,则可以允许用户通过在sandbox内运行输入的内容来安全地保存脚本。