“清理”用户提交的 Javascript - 所以它仍然有效!

2024-01-04

我计划在我的网站中设置一个功能,用户可以提交 HTML、CSS 和 JS,然后将其“实时”生成为完整的 HTML 工作页面。其他用户将能够看到这一点。这些页面需要有有效的 Javascript。

我知道这本身就是一个相当大的安全缺陷,但该功能在网站上非常重要。我有这些想法:

  • 无法链接到外部 Javascript 文件
  • 可以包含 jQuery 等,但只能来自受信任的 CDN(例如 Google)
  • 某些 Javascript 功能将被禁用和删除(例如eval())
  • 用户在获得一定的“声誉”之前无法提交实时演示代码
  • 用户提交的实时演示代码必须经过管理员授权才能上线
  • 不得使用缩小代码

以及被动安全措施:

  • 免责声明,所以我们不承担任何责任! ;)
  • “报告”按钮以防用户发现可疑情况

所以这是问题:作为一项安全计划,您对此有何看法?这些措施结合起来足以阻止攻击者吗?用户将在三个单独的输入中提交代码 - CSS、HTML 和 JS - 因此我将能够相应地进行过滤和清理,然后“实时”重组它以供其他人预览。

Thanks!

Jack


听起来像是一个计划,尽管我认为执行起来会很困难。

  • JavaScript 是一种非常灵活的语言,它可能不可能过滤掉所有的eval()-like 自动构建。

  • 还有很多方法可以从外部域获取脚本文件,但很难说清楚。

  • 可能有大量代码需要人工审查。

专注于该想法的声誉方面(仅接受来自受信任用户的可执行代码),并在与您登录的域分开的无 cookie“沙箱”域上运行所有内容,这无疑是一个好主意。

风险总会存在,但我不认为这种风险比互联网上任何其他提供 JavaScript 的网站更大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“清理”用户提交的 Javascript - 所以它仍然有效! 的相关文章

随机推荐

  • R - 缓慢地工作 lapply 对有序因子进行排序

    根据问题创建语料库和 DTM 的更有效方法 https stackoverflow com questions 25330753 more efficient means of creating a corpus and dtm 25333
  • 如何在 JavaScript 中检测 Mac OS X 版本

    我在互联网上到处搜索如何检测操作系统及其版本 我已经找到了如何在 Windows 上执行此操作 请参阅下面的代码 现在我希望它也适用于 Mac Windows 检测代码 完美运行 OS detection var os function v
  • 使用 agrep() 进行多个模式的模糊名称匹配的更快 R 代码...?

    我是一个 R 新手 一直在尝试使用agrep我有一个庞大的客户数据库 150 万行 我确信其中有很多重复项 但许多重复项并未使用 table 来获取重复的确切名称的频率 只要观察一些行 我就注意到许多重复项是 唯一的 因为名称的拼写中有一个
  • JSON 反序列化:如何从 JSON 对象数组中获取值

    我已在 C 中成功反序列化此 JSON 字符串 但无法从数组中嵌套的对象中提取值 JavaScriptSerializer js new JavaScriptSerializer string json key 1234 status ok
  • C++ 构造函数调用和对象创建

    class Test public int x Test x 0 cout lt lt constructor with no arguments called lt
  • 他们是如何制作那些精美的启动屏幕的?

    虽然我目前在应用商店中只有一款应用程序 但我有几个正在开发中 并且想知道用户是如何制作他们的启动屏幕的 我看过几个非常酷的动画 想知道这是否都是通过代码完成的 或者只是你在 iMovie 中制作的东西 然后将其作为视频运行 知道其中一些是如
  • 如何访问从 webpack 外部捆绑包/块捆绑的模块

    首先我要说的是 我已经尝试寻找这个问题的答案 但没有找到任何有效的方法 甚至没有找到任何可能的暗示 我最近从 RequireJS 配置转向使用 Webpack 进行汇总 在 Groovy 应用程序的某些地方 我们在 GSP 中有一个脚本标记
  • Quartz Spring CronTrigger 触发次数超过配置次数

    我有一个用于 digestJob 作业的 cronTrigger
  • 使用 TermDocumentMatrix 进行 UTF-8 字符编码

    我正在努力学习R 我已经尝试解决这个问题几个小时了 我已经搜索并尝试了很多方法来解决这个问题 但到目前为止还没有运气 那么我们开始吧 我正在从 Twitter 通过 twitteR 下载一些随机推文 当我检查数据框时 我可以看到所有特殊字符
  • REST 在分布式 Web 应用程序中的用途是什么

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习 REST API 但无法理解如何在分布式 Web 应用程序中使用 REST 这是唯一的参考 http www slides
  • 如何选择特定类的最后一个元素[重复]

    这个问题在这里已经有答案了 我想知道为什么 foo 正在记录一个值 而 bar 却没有 它们在语法上似乎也相同 编辑 这是一个 X Y 问题 我的目标是获得班级的最后一个元素foo我尝试使用这个last child 我试过last of t
  • 未提供有效的身份验证

    我被困在这个步骤2 4wiki https dev loganalytics io documentation 1 tutorials direct api 在上一步中 我获得了一个有效的令牌 为什么我收到 未提供有效的身份验证 我添加了一
  • 查找仅限于多个范围的重复项 - pandas

    假设我们的问题可以这样简化 df pd DataFrame df C rows C1 C2 C3 C2 C1 C2 C3 C1 C2 C3 C4 C1 df values customer1 4321 1266 5671 customer2
  • 找不到 MSBuild.exe、cmd.exe

    我最近安装了 Visual Studio 2017 MSBuild exe 不应该附带吗 bash 脚本之一正在调用它 但找不到任何内容 这是 build bat 中产生错误的部分 您可以看到整个文件here https github co
  • OpenCV Docker 多阶段构建 - 无法安装预构建源

    我正在尝试构建一个 Docker 映像 其中包括具有 CUDA 和 GPU 支持的非常特殊的 OpenCV 配置 构建成功 如果我make install它来自构建图像的相同上下文 它可以正常工作 当我尝试使用多阶段构建以避免保留构建 Op
  • Spacy Entity Linking 模型的训练时间

    我正在尝试使用 Wikidata 和 Wikipedia 中的脚本来训练 Spacy Entity Linking 模型https github com explosion spaCy tree master bin wiki entity
  • C# 匿名类型在 C# 7 中是否多余

    由于 C 7 引入了值元组 是否存在比元组更适合的有意义的场景 例如 以下行 collection Select x i gt x i Where y gt arr y i f y x ToArray 制作以下行 collection Se
  • 当用户返回后台应用程序时如何触发功能?

    例如 用户打开应用程序 按主页按钮 然后再次返回该应用程序 当用户导航回应用程序时 有什么方法可以触发某些功能吗 例如 当用户返回应用程序时自动加载视图对象 这个问题适用于 Android 和 iOS 在项目中根据您的喜好使用以下内容App
  • ggpattern na 值后缺少模式

    使用 ggpattern 如何不显示 NA 值的模式 但在该点之后继续模式 当我运行此代码时 NA 值之后没有更多模式 尽管应该有 library swimplot library ggpattern library tidyverse d
  • “清理”用户提交的 Javascript - 所以它仍然有效!

    我计划在我的网站中设置一个功能 用户可以提交 HTML CSS 和 JS 然后将其 实时 生成为完整的 HTML 工作页面 其他用户将能够看到这一点 这些页面需要有有效的 Javascript 我知道这本身就是一个相当大的安全缺陷 但该功能