在包含富文本编辑器的HTML小节中限制Javascript

时间:2018-09-05 04:11:14

标签: javascript html xss rich-text-editor

我正在开发一个使用富文本summernote editor的旧版Web应用程序,该应用程序可以将格式化的注释保存到我们的服务器以及许多嵌入式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 (即我们将编辑器内容加载到的区域)?还是这不是一种选择/易于解决?

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

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

1 个答案:

答案 0 :(得分:0)

我在本说明中读过https://github.com/summernote/summernote/issues/1617

  

无论如何,您都必须在服务器端进行验证。这是一个有趣的行为,我   同意,但允许用户在自己的浏览器中执行任何操作。的   您(而不是此包裹)应该照顾的唯一事情是   不允许用户在您的数据库中存储有害代码(即   稍后在其他用户的浏览器中显示)

因此,基本上,您是由用户负责尝试将哪些内容放入您的数据库或网页中。因此,您需要:

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