Удаление кнопки загрузки может поддержать рабочий процесс только для просмотра, но это не делает видимый документ невозможным для копирования. Надёжная реализация требует серверной авторизации, защищённого хранилища, короткоживущих сессий, тщательного журналирования и честного понимания того, чего могут достичь ограничения пользовательского интерфейса.
Doconut предоставляет встроенный .NET‑просмотрщик документов для бизнес‑приложений. Этот учебник объясняет дизайн безопасности без публикации догадок о свойствах конфигурации или другого недокументированного кода Doconut.

1. Определение понятия «Только просмотр»
Начните с точной политики. Разные команды могут понимать «только просмотр» так:
- Не предлагать оригинальный файл для загрузки.
- Не показывать действие экспорта.
- Не разрешать печать.
- Разрешать просмотр только в течение авторизованной сессии.
- Не позволять пользователям напрямую обращаться к месту хранения.
- Добавлять записи аудита при открытии документа.
Это отдельные механизмы контроля. Определите, какие из них требуются, и убедитесь, что выбранный продукт Doconut, плагины и лицензия поддерживают нужное поведение просмотрщика.
Никогда не обещайте, что видимый документ нельзя захватить. Скриншоты, камеры, средства доступности, возможности браузера и авторизованный доступ к отображаемым пикселям делают полную профилактику нереалистичной.
2. Защита оригинального файла
Оригинальный документ должен оставаться в защищённом серверном хранилище.
Используйте:
- Идентификаторы документов, генерируемые сервером
- Ограниченные права доступа к хранилищу
- Шифрование «на диске», где это требуется
- Документированную политику удержания
- Раздельные права для загрузки, просмотра, экспорта и администрирования
Не передавайте клиенту учётные данные хранилища, неограниченные пути к файлам или постоянные публичные URL‑адреса.
3. Авторизация каждого запроса документа
В ASP.NET Core защитите маршрут просмотрщика стандартными механизмами аутентификации и авторизации.
Сервер должен проверять:
- Пользователь аутентифицирован.
- Документ существует.
- Пользователю разрешено просматривать конкретный документ.
- Запрошенное действие разрешено для роли пользователя и текущего состояния рабочего процесса.
Атрибут [Authorize] может защищать маршрут, а политики, претензии или авторизация на основе ресурса позволяют принимать решение, специфичное для документа.
Авторизация должна охватывать любой конечный пункт, возвращающий данные документа, страницы, экспорты, аннотации или вывод печати. Защита только начальной страницы оставляет альтернативные маршруты уязвимыми.
4. Разделение прав просмотра и загрузки
Моделируйте права явно, а не выводите их из скрытой кнопки.
Например:
CanViewDocumentCanDownloadOriginalCanExportDocumentCanPrintDocumentCanManageDocument
Эти имена описывают политики приложения, а не API Doconut. Ваш слой авторизации должен оценивать их на сервере перед выполнением соответствующего действия.
Администратор может иметь право на загрузку, тогда как другой аутентифицированный пользователь имеет только право просмотра. Оба пользователя могут находиться на одной странице приложения, получая разные авторизованные возможности.
5. Настройка просмотрщика из официальной документации
Используйте только имена конфигураций и шаги интеграции, задокументированные для установленной версии Doconut в вашем приложении.
Проверенная страница просмотрщика Doconut предоставляет актуальную информацию о продукте. Страница загрузки и документации Doconut содержит ресурсы установки и примеры, зависящие от версии.
Если установленный продукт предоставляет поддерживаемую настройку для скрытия или отключения действия загрузки:
- Примените её согласно официальной документации.
- Рассматривайте её как контроль пользовательского интерфейса и рабочего процесса.
- Оставьте связанный серверный endpoint защищённым.
- Проверьте, что неавторизованные пользователи не могут обойти её прямым запросом.
Не копируйте догадочные свойства конфигурации из несвязанных статей и не предполагайте их поддержку.
6. Держите интеграцию просмотрщика за сервисом
Выделенный сервис приложения может:
- Определять авторизованный документ
- Открывать его через одобренную абстракцию хранилища
- Применять поддерживаемую конфигурацию просмотрщика
- Освобождать потоки и временные ресурсы
- Записывать очищенные события аудита
- Возвращать безопасные ошибки контроллеру
Это удерживает детали SDK вне политик авторизации и кода представления.
Стандартные типы .NET, такие как Stream, FileStream, CancellationToken, и сервисы, внедряемые через DI, могут формировать границу приложения. Следуйте документации Doconut для вызовов SDK.
7. Применение защиты в глубине (Defense in Depth)
Рабочий процесс только для просмотра может включать:
- Аутентификацию и авторизацию на уровне ресурса
- Изоляцию сети и хранилища
- Краткую продолжительность сессии
- Ограниченные маршруты экспорта и печати
- Водяные знаки, когда они поддерживаются и уместны
- События аудита доступа к документу
- Ограничения скорости и контроля конкурентности
- Чёткие правила удержания и очистки
- Мониторинг безопасности для обнаружения аномальных шаблонов доступа
Ни один отдельный контроль не достаточен. Скрытая кнопка без серверной защиты особенно легко обходится.
8. Журналирование доступа без утечки данных
Полезные поля аудита включают:
- Идентификатор документа в приложении
- Идентификатор авторизованного пользователя
- Временная метка
- Запрошенное действие
- Результат
- Идентификатор корреляции
- Очищенную причину отказа или сбоя
Избегайте журналировать:
- Содержание документа
- Учётные данные хранилища
- Токены доступа
- Чувствительные URL‑адреса
- Полные пути сервера
- Лишнюю персональную информацию
Защищайте журналы аудита в соответствии с их чувствительностью и требованиями к удержанию.
9. Тестирование попыток обхода UI
Не останавливайтесь после подтверждения отсутствия кнопки на панели инструментов.
Проверьте, может ли пользователь с правом только просмотра:
- Запросить напрямую маршрут оригинального файла
- Вызвать маршрут экспорта или печати
- Изменить идентификатор документа
- Повторно использовать истёкшую сессию
- Доступ к документу другого пользователя
- Обнаружить URL‑адреса хранилища в разметке или сетевых ответах
- Вызвать подробные ошибки, раскрывающие внутренние пути
- Сохранить доступ после отзыва прав
Включайте как автоматизированные тесты авторизации, так и ручное тестирование в браузере.
10. Установление точных ожиданий у пользователей
Объясните, что делает политика:
- Ограничивает предоставляемые приложением загрузки или экспорты.
- Ограничивает доступ авторизованным пользователям.
- Может фиксировать события просмотра.
- Держит оригинальный файл под серверным контролем.
Также разъясните, чего она не может гарантировать:
- Не может предотвратить фотографирование или скриншоты во всех средах.
- Не может отозвать уже увиденную и запомненную информацию.
- Не заменяет договорные, организационные или конечные меры безопасности.
Это различие повышает доверие к продукту и помогает заинтересованным сторонам выбирать подходящие меры для особо чувствительных материалов.
Список проверочных пунктов
- Просмотр и загрузка используют отдельные серверные права.
- Каждый запрос документа выполняет авторизацию на уровне ресурса.
- Оригинальный файл не имеет постоянного публичного URL.
- Настройки просмотрщика берутся из документации установленной версии Doconut.
- Скрытые действия имеют защищённые серверные эндпоинты.
- Временные данные имеют определённый процесс очистки.
- Журналы аудита не содержат содержимого документа и секретов.
- Неавторизованные прямые запросы покрыты тестами.
- Ответы об ошибках не раскрывают внутренние детали хранилища.
- Копия продукта не утверждает абсолютную невозможность копирования.
Где Doconut вписывается
Doconut предоставляет слой встроенного просмотра внутри .NET‑приложения. Ваше приложение остаётся ответственным за идентификацию, авторизацию, права, хранение, удержание, аудит и правдивость обещания «только просмотр».
Оцените SDK .NET‑просмотрщика документов Doconut в соответствии с вашими требованиями к безопасности и типичными документами. Используйте официальные ресурсы для поддерживаемой конфигурации, а не полагайтесь на догадочный исходный код.
Заключение
Рабочий процесс только для просмотра — это дизайн защиты в глубине, а не булевый флаг. Защитите оригинальный файл, авторизуйте каждый запрос, разделите права просмотра и загрузки, проверяйте поддерживаемые настройки просмотрщика, аудитируйте доступ и тестируйте прямые попытки обхода интерфейса.
При наличии этих контролей Doconut может предоставить встроенный опыт работы с документами, пока ваше ASP.NET‑приложение обеспечивает соблюдение политики безопасности.