Как предотвратить общую загрузку файлов с помощью 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:
Это должно решить вашу проблему.