代码之家  ›  专栏  ›  技术社区  ›  Lovethenakedgun

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

  •  0
  • Lovethenakedgun  · 技术社区  · 6 年前

    我正在开发一个传统的web应用程序,它同时使用富文本和 summernote editor ,它可以将格式化的笔记保存到我们的服务器上,还可以保存许多内嵌Javascript的实例。

    Summernote可以通过它的“代码”视图编写HTML/CSS/JS,但似乎没有任何防止XSS的内置支持。例如,如果您转到他们的主页,请转到编辑器的代码视图,然后编写 <script>alert(0)</script>

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

    考虑到只有这些编辑器需要能够将有效的HTML返回给用户,网站的其余部分我们可以并且确实可以完全清理内容,是否可以仅在HTML页面的一部分(即我们加载编辑器内容的区域)禁用内联JS/CSS?或者这不是一种选择/容易受到变通办法的影响?

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

    编辑2 :为了安全起见,肯定会实现某种白名单(也可能是CSP,但重构将是一个头痛的问题),但仍然想知道这是否可能:即在HTML的两个部分之间,是否可能阻止所有内联JS&CSS?

    1 回复  |  直到 6 年前
        1
  •  0
  •   F.Igor    6 年前

    https://github.com/summernote/summernote/issues/1617

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

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