限制包含富文本编辑器的HTML子部分中的Javascript

问题描述 投票:0回答:1

我正在研究一个遗留的Web应用程序,该应用程序使用富文本summernote editor,它可以将格式化的笔记保存到我们的服务器,以及大量的内联Javascript实例。

Summernote允许通过它的“代码”视图编写HTML / CSS / JS,但似乎没有任何内置支持来防止XSS。例如,如果您转到他们的主页,请转到编辑器的代码视图,然后编写<script>alert(0)</script>并将其转回文本视图,它将执行脚本。我们希望用户能够做大胆的内容,插入超链接和图像等,但没有JS甚至可能是CSS。

我们刚刚发现,最初在应用程序中为这些编辑器实施XSS保护的开发人员做了一些微弱的工作,现在正在努力确定它。到目前为止,似乎我的选择是:(a)创建/获取白名单,该白名单将解析Summernote HTML并且仅允许该字段中的某些HTML元素;和/或(b)实现CSP头并将所有内联JS / CSS移动到单独的文件中。

鉴于只有这些编辑器需要能够向用户返回有效的HTML,我们可以并且完全清理内容的网站的其余部分,是否可以仅在HTML页面的一部分中禁用内联JS / CSS(即我们加载编辑器内容的区域)?或者这不是一个选项/易于解决方案?

编辑:就像一个注释,我认识到,如果我们选择将内容保存到服务器,富文本编辑器无法阻止XSS,因为它在客户端运行。我的意思是我找不到有关HTML白名单的资源/建议,或通过他们的网站为各种服务器进行示例清理。

编辑2:肯定会在安全方面实现某种白名单(也可能是CSP,但重构会很麻烦),但仍然想知道这是否可能:I.e。在HTML的两个部分之间,是否可以阻止所有内联JS和CSS?

javascript html xss rich-text-editor
1个回答
0
投票

正如我在本文中读到的https://github.com/summernote/summernote/issues/1617

无论如何,您必须在服务器端进行验证。这是一个有趣的行为,我同意,但用户可以在自己的浏览器中做任何事情。您(您,而不是此软件包)唯一需要关注的是,不允许用户在您的数据库中存储有害代码(稍后会在其他用户浏览器中显示)

所以,基本上你负责用户试图放入你的数据库或网页的内容。所以你需要:

  • 对内容进行“服务器端”验证(例如,删除带有内容的<script>标签)
  • 实现客户端大小的清理(它不会阻止您进行服务器端验证)以帮助用户通知他不允许包含脚本。这可以在代码视图和预览之间切换时完成(参见Summernote event for switch from code view to editor
© www.soinside.com 2019 - 2024. All rights reserved.