pdfapi

Безопасность и данные

Документы, которые вы превращаете в PDF-файлы, — счета, договоры, акты и тому подобное — часто содержат персональные данные. Здесь объясняется, что с ними происходит и что следует учесть на своей стороне.

Приватное хранение результатов#

Исходный HTML, Markdown или файл Office обрабатывается автоматически и удаляется из очереди после завершения или ошибки. Готовый PDF хранится зашифрованным 24 часа и доступен только авторизованному аккаунту по тому же ключу идемпотентности и телу запроса. Публичных ссылок нет. После истечения срока выдача прекращается сразу, фоновая очистка запускается каждые 30 секунд. PDF исключены из резервных копий; содержимое документов не используется для аналитики. Удаление из активной базы не означает физического стирания блоков диска или WAL в ту же секунду. Подробнее.

В журналах — только служебные сведения о запросе, нужные для стабильной работы сервиса и статистики: время, размер, статус, число страниц. Ключи, токены и тела запросов в журналы не попадают. Ключи API мы тоже храним только в виде хешей — подробнее ниже.

Ключи#

  • Полный ключ выводится в личном кабинете один раз; у себя мы храним только его хеш SHA-256.
  • Отозванный ключ перестаёт работать сразу после нажатия кнопки отзыва.
  • Лимит частоты считается на ключ: использование одного не задевает скорость остальных.

Как выпускать, хранить и отзывать ключи описано в разделе Ключи API.

Внутренние адреса недоступны#

Для источника url адрес проверяется до рендера: ссылки на внутренние сети — 127.0.0.1, 10.x, 172.16–31.x, 192.168.x, 169.254.169.254 — отклоняются с 400 url_not_allowed, включая случаи, когда обычное доменное имя указывает на такой адрес. Запросы из самого документа к внутренним адресам тоже не проходят: такой ресурс просто не загрузится в соответствии с нашей политикой безопасности.

Шифрование#

API и сайт работают только по HTTPS, сертификаты выпускаются и продлеваются автоматически. Пароли от кабинета хранятся только в виде хеша.

Что учесть в коде#

Экранируйте данные пользователей

Если в HTML попадает то, что ввёл пользователь (имя, адрес, комментарий), пропускайте это через экранирование: html.escape в Python, htmlspecialchars в PHP или шаблоны с автоэкранированием (Jinja, Blade, Razor, html/template). Иначе пользователь вставит в документ свою разметку и скрипты, а это уже HTML-инъекция.

  • Ключ только на сервере. Не встраивайте его во фронтенд и мобильные приложения — подробнее в PDF в веб-приложении.
  • Markdown пропускает HTML. Разметка внутри Markdown попадает в документ как есть. Чужой Markdown экранируйте или очищайте так же, как HTML.
  • Свой ключ на окружение. Если стейджинг скомпрометирован, продакшен не пострадает.
  • Готовый PDF — ваши данные. Храните и передавайте его так же, как исходные документы.

Обработка персональных данных#

Как мы обрабатываем данные аккаунта и что делаем по запросу на удаление — в политике обработки персональных данных.