我正在研究一个遗留的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?
正如我在本文中读到的https://github.com/summernote/summernote/issues/1617
无论如何,您必须在服务器端进行验证。这是一个有趣的行为,我同意,但用户可以在自己的浏览器中做任何事情。您(您,而不是此软件包)唯一需要关注的是,不允许用户在您的数据库中存储有害代码(稍后会在其他用户浏览器中显示)
所以,基本上你负责用户试图放入你的数据库或网页的内容。所以你需要:
<script>
标签)