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

Security Issue - Allowing user to add his own JavaScript (only during runtime)

本文关键字:添加 自己的 运行时 JavaScript 用户 问题 许用户 安全      更新时间:2023-09-26

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

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

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

页面

不能保存在预览中,但是如果我允许用户使用动态添加的javascript,他会永久弄乱我的预览页面吗?

不是

永久的,不是。他只能搞砸自己当前的页面。

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

但是,请注意,一旦您的插件离开"预览"并且您允许保存显示给其他访问者的页面,您就会遇到这个问题。

是的,这是一个称为跨站点脚本 (XSS) 的大型攻击媒介。 你永远不应该在任意页面上运行用户提供的JavaScript,除非你绝对必须。

例如,我可以添加:

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

这将隐藏整个页面。

尽管您的脚本仅向当前用户显示,但您的页面可能容易受到跨站点脚本攻击。在这种情况下,处理它的方法是(因为您允许脚本)是使用与跨站点请求伪造预防类似的机制(尽管CSRF和XSS完全不同)。

例如,如果您的页面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 来防止此攻击。此标头不能跨域 POST(未经服务器使用 CORS 同意)。

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