用户评论中的降价(使用适当的消毒和 Youtube 视频)

Markdown in user comments (with proper sanitize and Youtube videos)

我一直在决定如何进行 Markdown 处理和 Html 清理。我有 comments/articles:

的用户需求
  1. 用户应该能够使用 Markdown 语法
  2. 用户应该能够 post youtube 视频/yandex.music 音频
  3. 当然,用户不应该被信任,他们的输入应该针对各种攻击进行验证
  4. 特别是,我不想让用户提交任意 iframe

我什至提交了对 markdig 库的修复以在媒体扩展中支持 yandex.music。但现在我卡住了。有我探索过的选项:

Markdig,然后 HtmlRuleSanitizer

我配置 Markdig 将 youtube/yandex.music 转换为 iframe,而不是使用 HtmlRuleSanitizer 进行清理。 HtmlRuleSanitizer 没有仅允许白名单域使用 iframe 的选项 — 因此它要么删除 youtube.com,要么允许 evilsite.com。我提交了 suggestion 但没有收到任何答复。

HtmlRuleSanitizer,然后是 Markdig

据我所知,这将允许各种 XSS 攻击——因为 Markdown-to-Html 转换是 inherently unsafe.

Html-转义一切,然后Markdig。

根据同一篇文章,这也不安全。

Markdig,然后 HtmlSanitizer

这个消毒剂有适当的挂钩(post-process 节点),但我担心这个库的支持,尤其是主要依赖 - AngleSharp 支持(它有活跃的可重现崩溃,并且似乎正在积极开发 w/o 提供稳定的 API,因此 HtmlSanitizer 似乎很难继续使用。

那么,有什么建议可以实现这个目标吗?我不相信只有我一个人遇到这个问题,我确实希望 应该 可以通过 .net 中的现有库解决。如果需要,我准备在上游贡献一些功能,但我还没有准备好分叉任何东西。 :-)

这通过添加 HtmlRuleSanitizer 来解决,特别是通过添加 IHtmlAttributeSanitizer 接口和 SanitizeAttributes 方法。

参见此处示例https://github.com/leotsarev/joinrpg-net/blob/88df35fedc5cee73067e9fec9e850cb02826c576/src/JoinRpg.Markdown/HtmlSanitizers.cs#L45