Pandoc 用户使用指南 - 安全性的说明

  1. 尽管 pandoc 本身除了你明确要求创建的文件(除用于生成 PDF 的临时文件外)之外不会创建或修改任何其他文件,但过滤器或自定义写入器理论上可以在你的文件系统上执行任何操作。在使用它们之前,请仔细审查过滤器和自定义写入器。

  2. 几种输入格式(包括 HTML、Org 和 RST)支持包含指令,允许将文件的内容包含在输出中。不受信任的攻击者可以利用这些指令查看文件系统上的文件内容。(使用 --sandbox 选项可以抵御这种威胁。)

  3. 几种输出格式(包括 RTF、FB2、带有 --self-contained 的 HTML、EPUB、Docx 和 ODT)将在输出文件中嵌入编码或原始图像。不受信任的攻击者可以利用这一点查看文件系统上非图像文件的内容。(使用 --sandbox 选项可以抵御这种威胁,但同时也会阻止在这些格式中包含图像。)

  4. 如果你的应用程序将 pandoc 用作 Haskell 库(而非通过 shell 调用可执行文件),你可以通过在 PandocPure 单子中运行 pandoc 操作来完全隔离 pandoc 与你的文件系统。更多详情请参阅 《使用 pandoc API》 文档。(这对应于命令行中使用 --sandbox 选项。)

  5. Pandoc 的解析器在某些极端情况下可能会表现出病态性能。为了避免利用这些问题发起的拒绝服务(DOS)攻击,明智的做法是在 pandoc 操作上设置超时。如果你使用的是 pandoc 可执行文件,可以在命令行选项中加入 +RTS -M512M -RTS(例如)来将堆大小限制为 512MB。请注意,commonmark 解析器(包括 commonmark_x 和 gfm)相比 markdown 解析器更不容易受到病态性能的影响,因此在处理不受信任的输入时它是更好的选择。

  6. Pandoc 生成的 HTML 不一定安全。如果 Markdown 输入启用了 raw_html,用户可以注入任意 HTML。即使禁用了 raw_html,用户也可以在 URL 和属性中包含危险内容。为了安全起见,你应该通过 HTML 清洗器运行所有来自不受信任用户输入生成的 HTML。

在本文档中