安全问题 - 允许用户添加自己的 JavaScript(仅在运行时)
Security Issue - Allowing user to add his own JavaScript (only during runtime)
我目前正在开发内容生成器,我有允许用户向页面添加自定义脚本的对象。
我担心我的插件的预览。页面不能保存在预览中,但是如果我允许用户使用动态添加的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 同意)。
另外,如果您的页面用于预览 - 如果您的预览无法保存,预览是为了什么?如果这与您的完整保存功能有关,则可以允许用户通过在沙盒中运行输入的内容来安全地保存脚本。
- 谷歌地图api:如何将我自己的标记添加到地图
- 我该如何将自己的数据添加到响应迅速的美国各州地图中
- 如何将我自己的验证代码添加到MooTools的lightface表单中
- 如果web托管版本失败,请添加我自己的.js库版本
- 如何将我们自己的按钮添加到浏览器的标题栏中
- 如何在某人的网页上添加自己的图层
- JsPlumb - 将自己的选择器函数添加到动态锚点
- 在 AJAX 函数中添加自己的 javascript 函数 ASP.NET
- 挖空添加我自己的数据绑定属性,如 With
- ReactJS:将我自己的道具添加到另一个组件中
- 谷歌地图API,添加我自己的位置
- 如何在angular js验证中添加自己的类名
- 为什么人们要在jQuery对象中添加自己的自定义/用户函数
- 如何扩展JqPlot类并添加自己的原型函数
- 我如何在谷歌地图上添加自己的图像或绘图选项
- 使用lodash . groupby.如何为分组输出添加自己的键
- 安全问题 - 允许用户添加自己的 JavaScript(仅在运行时)
- 在付款按钮上添加自己的金额
- 将选定的列表元素追加到文本区域,添加自己的文本
- 在jquery验证插件中添加自己的规则