Центр доверия
Последнее обновление: 2 августа 2026 г.
Каждое утверждение на этой странице измеряется по исходному коду и перепроверяется сборочным барьером. Там, где доказательства ещё нет, страница не молчит, а прямо об этом сообщает.
Безопасность памяти
Каждая строка кода, читающая недоверенные байты PDF, написана на Rust с безопасной работой с памятью. В пути разбора нет ни C, ни C++, как нет их и в замыкании его зависимостей. Это не обещание из дорожной карты, а сегодняшнее состояние кода, и обеспечивает его компилятор.
- 19 из 30 Rust-крейтов собираются под #![forbid(unsafe_code)] — настройкой, которую не может отменить ни один подмодуль.
- В любой собираемой нами конфигурации по всем 21 крейтам PDF-движка достижимо 0 небезопасных операций.
- 71 крейтов в замыкании зависимостей разборщика, из них 0 — подключённые библиотеки на C или C++.
- 0 небезопасных операций в 3 браузерных пакетах (WebAssembly).
- 11 фаззинг-целей непрерывно работают против пути разбора, каждая со стартовым корпусом.
Во всём рабочем пространстве 21 небезопасных операций, и все они вне пути PDF: вызовы хранилища учётных данных Windows и TPM, перехватчик клавиатуры в режиме киоска и два тестовых помощника. Каждая перечислена с обоснованием в полном заявлении.
Граница PDFium
PDFium написан на C++, и мы этого не скрываем. Он производит растровые пиксели как визуальное свидетельство и ничего больше. Вердикты предпечатной проверки, реестр правил и решения о соответствии выходят из нашего собственного ядра на Rust, ни разу не проходя через него. PDFium не может ни одобрить, ни отклонить файл.
- Работает как отдельный процесс операционной системы и никогда не подключается как библиотека.
- Без доступа к сети, от непривилегированного пользователя, корневая файловая система только для чтения, все привилегии сняты.
- По одной странице за раз, с ограничениями процессора, памяти, процессов и временного хранилища, которые обеспечивает ядро.
- JavaScript (V8) и XFA исключены из сборки, что убирает большую часть исторической поверхности уязвимостей PDFium.
- Квитанции об изоляции подписывает независимый супервизор; рабочий процесс не может засвидетельствовать собственную изоляцию.
Что ещё не доказано: воспроизводимая сборка PDFium, которая дала бы закреплённую контрольную сумму двоичного файла, пока не выполнена. Поэтому наш валидатор цепочки поставок отклоняет текущий манифест сборки в репозитории, и бэкенд рендеринга не считается пригодным для промышленной эксплуатации. Барьер работает по принципу отказа при отсутствии доказательства: недостающее доказательство означает, что путь не выполняется вовсе, а не что он выполняется без проверки. Утверждение о безопасности памяти выше от этого не зависит, поскольку путь разбора никогда не достигает PDFium.
Что мы утверждаем и чего не утверждаем
Отчёт предпечатной проверки — это диагностическое свидетельство. Он измеряет файл и сообщает, что в нём содержится; он не изменяет файл и не является производственным доказательством. Сохранять эту границу видимой — и есть смысл данного раздела.
Мы утверждаем
- Мы измеряем ваш PDF и сообщаем найденное, называя правило и порог, стоящие за каждым результатом.
- Мы никогда не изменяем ваш файл: без преобразования цвета, сведения прозрачности, подмены шрифтов и треппинга.
- Каждый результат несёт версию движка и версию реестра правил, которые его получили.
- Путь разбора написан на Rust с безопасной работой с памятью, и сборочный барьер перепроверяет это при каждом изменении.
Мы не утверждаем
- Диагностический отчёт не является сертифицированной пробой и не гарантирует готовности к печати.
- Отрисованные пиксели не эквивалентны RIP и не несут полномочий по цветоделению.
- SBOM перечисляет компоненты; об известных уязвимостях она ничего не говорит.
- Ничто здесь не утверждает отсутствия ошибок — только то, что целый их класс исключён по построению.
Ведомость состава ПО (SBOM)
CycloneDX 1.6, создаётся из зафиксированных в репозитории lock-файлов. Репозиторий хранит контрольную сумму каждой SBOM, а не саму SBOM, поскольку SBOM — чистая функция уже зафиксированного lock-файла. CI при каждом запуске проверяет, что контрольная сумма по-прежнему соответствует этим файлам.
| SBOM | Компоненты | Хеш SHA-256 |
|---|---|---|
| sbom-rust.cdx.json | 871 | f9e3f4531eda6cc2… |
| sbom-npm.cdx.json | 2452 | d944df1f6a65a671… |
Полные SBOM публикуются как артефакты выпуска. Чтобы запросить их или получить копию для закупочного досье, напишите на security@nowtoprint.com.
Скоординированное раскрытие уязвимостей
Сообщайте через канал security advisory репозитория или по электронной почте. Мы подтверждаем получение в течение 3 рабочих дней и даём первичную оценку в течение 10 рабочих дней. Это верхние границы, заданные размером команды, а не целевые показатели. Сроки раскрытия мы согласуем с вами; если исправление не выпущено в течение 90 дней, решение о публикации остаётся за вами.
Согласно Регламенту ЕС о киберустойчивости (2024/2847), с 11 сентября 2026 года активно эксплуатируемая уязвимость или серьёзный инцидент должны поступить в ENISA и профильный CSIRT в виде раннего предупреждения в течение 24 часов и уведомления в течение 72 часов. Эта обязанность существует перед регулятором, а не перед сообщившим: её питает тот же процесс, но это не то же самое обещание.
Контакт по безопасности: security@nowtoprint.com
Доказательства
Приведённые выше утверждения формируются из перечисленных ниже файлов. Репозиторий закрытый, поэтому они указаны путями: аудитор может запросить любой из них по имени в ходе закупочной проверки.
- docs/security/MEMORY_SAFETY_STATEMENT_2026.md
- docs/security/MEMORY_SAFETY_STATEMENT_2026_TR.md
- docs/api/generated/sbom-manifest.v1.json
- docs/api/generated/repo-facts.v1.json
- deploy/pdf-workers/pdf-worker-isolation-policy.v1.json
- scripts/ci/memory-safety-claim-check.mjs
- SECURITY.md