Как защитить PDF на сайте: что работает
Начнём с неприятного: файл, доступный по ссылке без входа, скачивается целиком — просмотр в браузере и есть скачивание, просто копия оседает в кэше. Пароль на такой файл бессмыслен, потому что его пришлось бы опубликовать рядом со ссылкой. Настоящая граница проходит не внутри PDF, а перед ним: за авторизацией, в объёме опубликованного и в том, насколько адресной вы сделали каждую копию.
Коротко о цифрах
- Шифрование
- qpdf --encrypt, AES-256 (--bits=256)
- Пароль
- латиница, цифры и знаки, от 4 до 1024 символов; кириллица отклоняется
- Владельческий пароль
- если не задан — случайный, 24 байта в кодировке base64url
- Флаги прав
- --print, --extract, --modify — исполняет просмотрщик, а не файл
- Пределы
- 50 МБ на файл, 20 запросов за 10 минут
- Чего не даёт
- не мешает снимку экрана, распознаванию и пересохранению копии
Что даёт наш protect
Даёт две разные вещи. Первая — шифрование содержимого: qpdf собирает файл с AES-256, и без пароля открытия читаемого текста в нём нет. Это настоящая криптография, а не флаг: неизвестный пароль не подбирается, у нас нет перебора и не будет. Пароль принимается только из латинских букв, цифр и знаков, длиной от 4 до 1024 символов; кириллический отклоняется формой.
Вторая — флаги прав: печать, извлечение текста, изменение. Они пишутся в документ как --print, --extract и --modify, но исполняет их программа просмотра, а не файл. Чтобы флаги нельзя было снять изнутри, за ними стоит владельческий пароль: если вы его не задали, генерируется случайный из 24 байтов, и не знает его никто, включая нас.
Чего не даёт никакая защита PDF
- Запретить скачивание файла, который вы опубликовали: показ в браузере технически уже есть скачивание.
- Помешать снимку экрана: изображение страницы не защищено ничем.
- Помешать распознаванию: текст со страницы восстанавливается прогоном через OCR, пусть и с опечатками.
- Остановить программу, которая флаги прав просто не проверяет: текстовый слой лежит в файле открыто.
- Отозвать копию, которая уже у читателя на диске: после скачивания файл живёт своей жизнью.
Что действительно работает на сайте
- Решите, что вообще должно быть публичным: выложенный документ рано или поздно будет скопирован целиком.
- Закрытое — за авторизацию: право открыть страницу проверяет ваш сервер, а не сам файл.
- Публикуйте сокращённую версию: извлеките из документа те страницы, которые можно показывать всем.
- На персональные копии ставьте водяной знак с именем получателя — он не запрещает пересылку, но делает утечку адресной.
- Шифруйте паролем только то, что передаёте адресно, и передавайте пароль другим каналом, не той же страницей.
- Если файл не должен попасть в поиск, пометка задаётся заголовком со стороны сервера: внутри PDF места для неё нет.
Частые вопросы
Можно ли запретить скачивание PDF с сайта?
Нет. Чтобы показать документ, браузер должен его получить, поэтому просмотр и скачивание — одно и то же действие. Скрытая кнопка меняет только удобство, а не доступ.
Есть ли смысл ставить пароль на публичный файл?
Нет: пароль пришлось бы опубликовать рядом со ссылкой, и защита исчезает. Шифрование имеет смысл там, где документ передаётся адресно, а пароль идёт другим каналом.
Защитит ли водяной знак от копирования?
Не защитит, и обещать обратное нечестно. Он делает копию адресной: по знаку видно, чей экземпляр ушёл дальше, и это меняет поведение получателя сильнее запрета.
Как убрать документ из поисковой выдачи?
Надёжно — убрать файл из открытого доступа и закрыть его авторизацией. Служебная пометка для поисковиков задаётся заголовком ответа сервера, внутри PDF её разместить негде.