Безопасные файлы - загрузка только аутентифицированным пользователем - PullRequest
0 голосов
/ 25 сентября 2019

как бы защитить файлы на веб-сервере?Мне бы хотелось, чтобы они были доступны для загрузки только аутентифицированным пользователям. Как мне остановить, чтобы кто-то вставлял URL-адрес файлов и просто загружал его без авторизации.скажем, например - пользователь загружает файл - возможно, у вас есть контроллер, который проверяет аутентификацию и передает им файл с помощью этого URL: то есть: site.com/controller/download/filename, что мешает людям делать это без авторизации напрямую:site.com/files/filename.ext

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

возможно, я здесь упускаю фундаментальный - но как это сделатьэто и сохраняет файлы в секрете?

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Создайте действие для загрузки файлов на основе уникального зашифрованного идентификатора, как показано ниже.Каждый файл должен быть введен в таблицу file , в которой сохраняются такие данные, как имя файла, оригинальное имя, загруженные пользователем, uuid и т. Д., И на основании этих данных можно применять ограничения к действию загрузки.Вы также должны определить правило доступа для действия загрузки, если вы хотите, чтобы только зарегистрированный пользователь мог загружать файл.

public function actionDownload($id) 
    { 
        $file = File::findOne(['uuid'=>$id]);
        if($file!=null)
        {
           $path = UPLOAD_BASE_PATH.'/'.$file->name;
           if (file_exists($path) && !is_dir($path)) {
            return Yii::$app->response->sendFile($path,$file->original_name);
           }
        }
        throw new NotFoundHttpException("File not found");
    }
0 голосов
/ 25 сентября 2019

Если вы не хотите, чтобы люди разрешали доступ к файлам по прямой ссылке, вам следует сохранять файлы вне корневого веб-каталога.В yii2 ваш веб-корень находится в папке /web, и эта папка должна быть установлена ​​в качестве корневого веб-документа.Это заставит сервер направлять на него все запросы, предотвращая любые попытки доступа к файлам вне папки /web напрямую.См. apache docs для получения дополнительной информации.

Если у вас должна быть папка в том месте, где к ней можно получить прямой доступ, вы можете использовать .htaccess, чтобы заблокировать любой прямой доступ к папке.Как это сделать, ответ на этот вопрос: Запретить доступ к одной конкретной папке в .htaccess

...