Как ограничить доступ к файлу, доступ к которому может получить только владелец?

117
13

Я ищу ответ на вопрос, похожий на этот: защитить доступ к файлам пользователей, чтобы доступ к нему мог получить только владелец?

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

и решение, принятое для этого вопроса, в порядке, поэтому я буду "прокси" запрашивать файлы через специальный скрипт, который будет проверять, разрешено ли пользователю использовать этот файл.

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

Из-за конкретного местоположения я не могу поместить все пользовательские файлы в папку с идентификатором пользователя в своем имени, поэтому я думаю о именах файлов, где часть имени будет содержать идентификатор пользователя. Таким образом, имена файлов могут быть такими:

1 _pic.jpg, 2 _pic.png, 1 _pic.gif и т.д., Где цифра в начале имени = идентификатор пользователя

Затем я смогу легко проанализировать имя файла и сравнить идентификатор пользователя с ним с идентификатором пользователя из сеанса и проверить, является ли пользователь владельцем файла.

Что вы думаете о таком подходе, какие у него недостатки?

Заранее спасибо!

спросил(а) 2021-01-25T15:22:29+03:00 5 месяцев назад
1
Решение
63

Пока вам нужно только проверить, является ли пользователь, пытающийся получить доступ к файлу, пользователем, который изначально загрузил файл, ваш apporach в порядке. Убедитесь, что каталог НЕ доступен через корень документа, поэтому файлы по-прежнему безопасны, если ваш скрипт или файл.htaccess не работают. Также убедитесь, что имена файлов не могут столкнуться для разных пользователей.

ответил(а) 2021-01-25T15:22:29+03:00 5 месяцев назад
44

Я не могу представить, что функция добавит большую нагрузку на базу данных. Однако, если это вызывает беспокойство, тогда создайте безопасную систему входа, которая ДОЛЖНА получить доступ к базе данных. Это нужно будет делать только один раз за сеанс, чтобы не было загрузки сервера. После того, как пользователь войдет в систему, установите значение в переменной сеанса, которая может быть использована с этого момента, когда он сообщает скрипту, что пользователь может иметь доступ к файлам.

ответил(а) 2021-01-25T15:22:29+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема