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

安全问题-允许用户添加自己的JavaScript(仅在运行时),javascript,jquery,security,web,Javascript,Jquery,Security,Web,我目前正在开发一个内容生成器,我有一些对象允许用户向页面添加自定义脚本 我担心我的插件的预览。页面不能保存在预览中,但是如果我允许用户使用动态添加的javascript,用户会永久性地干扰我的预览页面吗 我还想提到,JavaScript是通过Ajax发送到PHP文件的,然后附加到正文上。 < P>是的,这是一个大的攻击向量,称为(XSS)。除非绝对必须,否则决不能在任意页面上运行用户提供的JavaScript 例如,我可以补充: document.body.style.display = 'no

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

我担心我的插件的预览。页面不能保存在预览中,但是如果我允许用户使用动态添加的javascript,用户会永久性地干扰我的预览页面吗


我还想提到,JavaScript是通过Ajax发送到PHP文件的,然后附加到正文上。

< P>是的,这是一个大的攻击向量,称为(XSS)。除非绝对必须,否则决不能在任意页面上运行用户提供的JavaScript

例如,我可以补充:

document.body.style.display = 'none';
这会隐藏整个页面

页面不能保存在预览中,但是如果我允许用户使用动态添加的javascript,用户会永久性地干扰我的预览页面吗

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

如果自定义脚本和页面没有离开客户机的计算机,或者您可以确保它们不会被提供给其他人(这意味着它们没有存储在服务器上),那么您就不会受到攻击


但是,请注意,一旦您的插件退出“预览”并允许保存显示给其他访问者的页面,您就会遇到此问题。

尽管您的脚本仅显示给当前用户,但您的页面可能会受到攻击。在这种情况下处理它的方法(因为您允许脚本)是使用与预防类似的机制(尽管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将
内容
值发布到自己的站点时,您可以通过检查
X-request-With
请求头是否设置为
XMLHttpRequest
来防止此攻击。此标头(您的服务器不同意使用此标头)


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

如果无法保存任何内容,则任何内容都不会被永久破坏。然而,似乎不太可能保存任何内容,这不是您的内容生成器的全部用途吗?谁使用内容生成器?谁将查看生成的内容(包括脚本)?自定义脚本来自哪里?事实上,这就是内容生成器的用途。但是,它将是一个付费应用程序,我将禁用预览的保存功能。禁用是通过if(disablesave==true){}完成的,所以我不确定这是否非常有效。哦,这就是你所说的“预览”,我曾想过“内容预览”。如果自定义脚本和页面没有离开客户端的计算机,或者您可以确保它们不会提供给其他人(这意味着它们没有存储在服务器上),那么您是安全的。使用display:none-on-the body会违反他的兴趣。为了防止这种情况发生,我是否应该将保存脚本从预览站点一起删除?@GrozavAlexIoan这只是一个例子太棒了!这就是我想知道的。非常感谢你!