Защита файлов через Интернет: детальный доступ к файлам на основе авторизации

У меня есть система, где сотрудники могут загружать файлы. Есть три способа

Загрузить в мой аккаунт в публичном, приватном или защищенном режиме
Загрузка в учетную запись отдела в публичном, приватном или защищенном режиме
Загрузить в аккаунт организации в публичном, приватном или защищенном режиме

где публичный виден кому-то, только для группы или отдельного человека и защищен для всех в организации.

Все файлы для организации хранятся в каталоге, скажем, / files //, на файловом сервере, например

файлы
+ - 234809
| + img1.jpg
| + doc1.pdf
+ - 808234
| + doc2.pdf

Я храню путь к файлу и уровень конфиденциальности в БД. Таким образом, я могу контролировать, показывать ли ссылку на файл URL пользователю - на заданной странице.

Проблема в том, что у меня нет никакого контроля над URL-адресом файла... поэтому, если кто-то вводит URL-адрес img1.jpg в адресной строке своего браузера, нет способа узнать, имеет ли авторизованный пользователь право на просмотр img1..jpg.

Любое предложение?


Это Java-приложение. Тем не менее, есть отдельный экземпляр Glassfish, работающий в качестве файлового сервера. Поскольку приложение еще не выпущено, мы готовы принять лучшую стратегию доступа к файлам.

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

Спасибо
Nishant

2 ответа

Решение

Вы задаете интересный вопрос, и ваше понимание проблемы является правильным.

В зависимости от версии IIS, которая обслуживает контент, вы можете даже не иметь контроля доступа, если контент был в вашем vdir.

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

Есть несколько способов сделать это, самый простой из которых - это HttpHandler, сопоставленный с несуществующим каталогом, скажем / downloads, и синтаксический анализ имени файла из RequestUri, установка правильного типа содержимого и запись файла в Response.

В этом случае ваш HttpHandler защищен, что позволяет вам определять доступ.

Вы можете хранить файлы вне общедоступных папок и иметь какой-то маршрут для перехвата любого URL-адреса, запрашивающего файл у организации. Затем вы можете обслуживать файл программно, а не позволять веб-серверу делать это без какого-либо контроля.

Другие вопросы по тегам