Конфиденциальность файлов Laravel

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

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

Создайте связь между файлами и пользователями, затем обслуживайте только двоичные файлы response()->download('/path/to/file'), где path/to/file - это безопасное место в вашей файловой системе. Пример обслуживания двоичных файлов: stackoverflow.com/a/53145223/2797224

adam 13.12.2018 22:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
96
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Храните все файлы в папках, недоступных для любого пользователя, чтобы предотвратить угадывание URL-адресов.

Ваш код будет отвечать за проверку того, владеет ли пользователь файлом. Как только пользователь очищен, вы перемещаете файл во временный файл, доступный для всех:

Storage::copy('restricted_folder/file.jpg', 'public_folder/random_name.jpg');

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

    return response()->download('public_folder/random_name.jpg','file.jpg')->deleteFileAfterSend();

Перемещение файла с последующим его удалением после загрузки будет означать, что файл будет навсегда утерян после однократной загрузки. Наверное, не идеально. return response()->download('restricted_folder/file.jpg') будет работать нормально, без всяких движений, стирания, причитания и скрежета зубов.

ceejayoz 13.12.2018 22:20

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

Arthur Samarcos 13.12.2018 22:22

Можно с response()->download(). Он передает файл через Laravel.

ceejayoz 13.12.2018 22:25

Спасибо, я не знал об этом.

Arthur Samarcos 13.12.2018 22:26

Ответ здесь немного зависит от безопасности как, что все это должно быть.

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

Laravel действительно делает это изначально, если вы используете метод store():

$path = $request->file('avatar')->store('avatars');

Если вам нужна более высокая степень безопасности, вы можете хранить загруженные файлы в закрытом месте. Затем добавьте маршрут (например, download/{id}), пусть этот маршрут проверяет права пользователя для файла, о котором идет речь, и передает файл браузеру, если он авторизован:

return Storage::download('path/to/the.file');

Storage::download проксирует файл через Laravel, поэтому это работает даже с файлами, не хранящимися в общей папке.

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