我坚持决定如何进行 Markdown 处理和 Html 清理。我对评论/文章有这样的用户要求:
- 用户应该能够使用 Markdown 语法
- 用户应该能够发布 youtube 视频/yandex.music 音频
- 当然,用户不应该被信任,他们的输入应该针对所有类型的攻击进行验证
- 特别是,我不想允许用户提交任意 iframe
我什至提交了修复markdig https://github.com/lunet-io/markdig在媒体扩展中支持 yandex.music 的库。但现在我被困住了。这是我探索过的选项:
那么马克迪格HtmlRuleSanitizer https://github.com/Vereyon/HtmlRuleSanitizer
我配置了Markdig
将 youtube/yandex.music 转换为 iframe,然后使用HtmlRuleSanitizer
. HtmlRuleSanitizer
没有选项只允许 iframe 用于白名单域 - 所以它要么会删除youtube.com
,或者将允许evilsite.com
。我呈交了建议 https://github.com/Vereyon/HtmlRuleSanitizer/issues/19但没有收到任何答复。
HtmlRuleSanitizer,然后是 Markdig
据我所知,这将允许各种 XSS 攻击 - 因为 Markdown 到 Html 的转换是本质上不安全 https://github.com/showdownjs/showdown/wiki/Markdown%27s-XSS-Vulnerability-(and-how-to-mitigate-it)#mixed-htmlmarkdown-xss-attack.
Html-转义所有内容,然后 Markdig。
根据同一篇文章,这也不安全。
那么马克迪格Html消毒剂 https://github.com/mganss/HtmlSanitizer
这个消毒剂有适当的挂钩(后处理节点),但我担心这个库的支持,尤其是主要依赖项 - AngleSharp 支持(它有活跃的可重现崩溃,并且似乎正在积极开发,不提供稳定的API,所以 HtmlSanitizer 似乎很难继续下去)。
那么,我有什么建议可以实现这个目标吗?我拒绝相信我是唯一一个遇到这个问题的人,我确实希望should可以用.net中的现有库来解决。如果需要的话,我已经准备好向上游贡献一些功能,但我还没有准备好分叉任何东西。 :-)
这是通过添加来解决的HtmlRuleSanitizer https://github.com/Vereyon/HtmlRuleSanitizer/,特别是通过添加IHtmlAttributeSanitizer
接口和SanitizeAttributes
method.
请参阅此处的示例https://github.com/leotsarev/joinrpg-net/blob/88df35fedc5cee73067e9fec9e850cb02826c576/src/JoinRpg.Markdown/HtmlSanitizers.cs#L45 https://github.com/leotsarev/joinrpg-net/blob/88df35fedc5cee73067e9fec9e850cb02826c576/src/JoinRpg.Markdown/HtmlSanitizers.cs#L45
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)