用户评论中的 Markdown(带有适当的清理和 Youtube 视频)

2024-01-06

我坚持决定如何进行 Markdown 处理和 Html 清理。我对评论/文章有这样的用户要求:

  1. 用户应该能够使用 Markdown 语法
  2. 用户应该能够发布 youtube 视频/yandex.music 音频
  3. 当然,用户不应该被信任,他们的输入应该针对所有类型的攻击进行验证
  4. 特别是,我不想允许用户提交任意 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(使用前将#替换为@)

用户评论中的 Markdown(带有适当的清理和 Youtube 视频) 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的

随机推荐

  • 获得 Android 用户消息平台的同意

    我正在尝试使用 Admob 实现 UE 同意 让用户选择是否想要在 Android 中显示个性化广告 我正在通过用户消息平台的 资金选择 来做到这一点 我遵循了这个快速入门指南 https developers google com adm
  • Sphinx实时索引配置?

    我是 Sphinx 的新手 我需要 Linux 服务器中实时索引 sphinx config 的示例代码 对于近实时索引 您可以使用增量方法 http sphinxsearch com docs 1 10 delta updates htm
  • C 标准库中包含哪些内容?

    我将举一个例子GNU C 库 http www gnu org software libc manual html mono libc html Opening and Closing Files文档 13 1 打开和关闭文件 本节描述打开
  • 当你有 std::string 时如何使用 basic_istream

    我有一个使用 basic istream 作为参数的函数 并且我有一个 std string 其中包含我需要传递它的数据 我怎么做 您可以将字符串数据放入流中 std string x std stringstream ss x put s
  • 比较器 - int 不能取消引用[重复]

    这个问题在这里已经有答案了 我在这里看到了如何使用 Comparator 接口对 ArrayList 进行排序的示例 所以我尝试了一下 对于字符串 它工作得很好 但是对于我想要排序的一个变量是整数 它不会编译 说 int 不能取消引用 我该
  • 如何让屏幕暂停? [复制]

    这个问题在这里已经有答案了 可能的重复 如何阻止 C 控制台应用程序立即退出 https stackoverflow com questions 2529617 how to stop c console application from
  • 在 C++ 中使用 OpenCV 2.4 计算凸面缺陷

    我正在使用 OpenCV 2 4 来计算图像的凸包 我还进行了一些处理以消除图像中的一些噪声 这与问题并不真正相关 计算凸包的代码如下 cv Mat sourceImage assume something is already here
  • 如何将HTML文件转换为word? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要将 HTML 文档作为 Word DOC 文件保存在内存中 有人可以给我一些可以用来执行此操作的
  • JFreeChart 中的 LogAxis 上未显示小刻度

    我在用着JFreeChart绘制一些数据并使用LogAxis对于范围轴 我很困惑为什么我似乎无法在轴上显示小刻度 但网格线显示得很好 如果我不使用LogAxis我可以使用以下命令打开和关闭小刻度setMinorTickMarksVisibl
  • 具有拖放功能的示例任务应用程序

    app js App Em Application create App IndexRoute Em Route extend model function return newTasks Em A id 1 name Task 1 id
  • 这是 JavaScript 中的一个简单的去抖动函数吗?

    var debounce function fn delay var timeoutId return function debounced if timeoutId clearTimeout timeoutId timeoutId set
  • CSS 选择最多 N 层的嵌套元素

    我有许多嵌套元素 并且我尝试仅选择前 N 层 下面显示了一个工作示例 其中我选择了前 7 个级别并设置了它们的样式 这正是我想要的 但是 我希望有一种选择这些元素的简化方法 在我的实际用例中 我不知道嵌套元素的总数 并且我试图选择前 50
  • 使用 Rcpp Sugar 将平均值和标准差传递到 dnorm()

    我正在将一些 R 代码转换为 Rcpp 代码 并且需要计算给定均值向量和标准差向量的观察向量的可能性 如果我假设平均值为 0 标准差为 1 我可以编写这个函数 运行这个函数需要加载 inline 和 Rcpp 包 dtest1 cxxfun
  • 与 jMockit 结合的测试覆盖率报告

    我正在使用 jmockit 和 Ant 对于每个测试文件运行 index html文件在覆盖率报告文件夹中创建 覆盖 对于多个测试文件 这index html被覆盖 我正在寻找所有文件的综合报告 应该做什么 我读过有关使用 ser文件 但我
  • 为什么无法将任何字体另存为图像? (但要在我的Windows窗体上显示它)

    我有点困惑 因为我可以在 Windows 窗体上显示每种字体的每个字符串 但作为图像并不总是可能的 也许我的代码有问题 但让我告诉你我正在尝试什么 一开始我有这个 Label l new Label l Text CSharp this F
  • Ruby:在代码中使用 rand() 但编写测试来验证概率

    我有一些代码可以根据加权随机提供东西 权重较大的事物更有可能被随机选择 现在 作为一名优秀的 Ruby 专家 我当然希望通过测试来覆盖所有这些代码 我想测试是否按照正确的概率获取内容 那么我该如何测试呢 为应该是随机的东西创建测试使得很难比
  • 如何在 Windows 服务中显示表单。

    我想在 Windows 服务中的 OnStart 方法中加载表单 这是我的代码 它不起作用 您能提供任何帮助吗 protected override void OnStart string args Form1 fr new Form1 f
  • Firebase FCM,同一 Firebase 项目中的多个应用程序

    我有一个 Firebase 项目 在其中注册了多个应用程序 现在我想添加推送通知 并且我希望能够区分哪个应用程序应该被推送通知唤醒 在 google services json 文件中 我看到所有应用程序都具有相同的值current key
  • 无法更改工具栏的颜色

    谁能解释一下 为什么我的工具栏没有改变它的颜色 即使我创建了另一种样式 例如 将其添加到我的清单文件中 例如
  • 用户评论中的 Markdown(带有适当的清理和 Youtube 视频)

    我坚持决定如何进行 Markdown 处理和 Html 清理 我对评论 文章有这样的用户要求 用户应该能够使用 Markdown 语法 用户应该能够发布 youtube 视频 yandex music 音频 当然 用户不应该被信任 他们的输