我有一个浏览器编辑器,类型为 contentEditable
用户可以在其中复制/粘贴或选择要放入的 html 片段。
这些片段可以是任何类型的 HTML,因此我们必须清理内容,使其不包含一些安全问题标签(如 <script>
等...)。
我知道一些允许某些白名单策略的 sanitizer 程序库(如 JVM 上的 JSoup),但这些规则通常非常简单,比如说明哪些标签/属性被列入白名单,仅此而已。
我们想要更高级的规则,例如:
- 定义要保留或不保留的内联样式,
- 将相对链接转换为绝对链接
- 根据类名将部分标签列入黑名单或白名单
- 根据 URI 模式允许某些 URI 属性(例如只允许指向某个域的链接)。
- 在某些情况下,我们希望被禁止的 dom 节点被它们的子节点“替换”(以删除格式和 html 布局元素,但不丢失黑名单标签中的文本节点
到目前为止,我们已经完成了一些代码来处理这个问题,但我发现这非常棘手。是否有已知的库、标准或算法来处理此类事情?我不是 XML 解析/转换专家,也不是我可以使用的任何东西,例如 XSLT、SAX 或其他可以帮助我解决问题的东西。
我正在寻找有关浏览器 (JS) 和 JVM(Java 或 Scala)的解决方案。关于如何实现这一目标的任何想法?
我是一名优秀的程序员,十分优秀!