Как предотвратить общую загрузку файлов с помощью php?

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

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

Мне нужно решение в php.

Я googled вокруг, но ничего прямо вперед пока.

В настоящее время в моем корневом документе у меня есть папка с именем admin и подпапка под названием uploads внутри администратора. Таким образом, может загружаться только роль администратора. Как редактор, так и администратор могут загрузить. Что мне делать в этом случае?

Просьба сообщить.

Ответ 1

Поместите файлы где-нибудь за пределы общедоступного каталога webroot или настройте сервер, чтобы он не обслуживал файлы. Пока ваш сервер будет счастливо обслуживать все с допустимым URL-адресом, вы ничего не можете сделать с PHP, чтобы это предотвратить.


Если ваши файлы находятся в папке /public_html/, выньте их из этой папки и поместите их, например. /secret_files/, поэтому структура вашего каталога выглядит примерно так:

public_html/
    index.html
    admin/
        admin_index.php
secret_files/
    my_secret_file.txt

Веб-сервер настроен только на обслуживание файлов в каталоге /public_html/, поэтому никто не будет иметь доступ к каталогам за пределами (технический термин выше).

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

Ответ 2

Не храните файлы в каталоге под корнем документа.

Вместо этого переместите их в другое место, а затем PHP script может программно определить, может ли кто-то их загрузить, а затем использовать readfile() или что-то подобно потоку их пользователю.

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

Ответ 3

Ответ на вопрос о том, как защитить паролем PHP: Это должно решить вашу проблему.