Как предотвратить публичную загрузку файлов с помощью php?
У меня есть скрипт, который позволяет только авторизованным пользователям загружать файлы в определенную папку.
Однако я не знаю, как запретить людям свободно скачивать без входа в систему.
Мне нужно решение на php.
Я погуглил, но пока ничего прямолинейного.
В настоящее время в корневом каталоге моего документа у меня есть папка admin и подпапка uploads внутри администратора. Таким образом, загружать может только роль администратора. Как редактор, так и администратор могут загружать. Что должен ли я делать в этом случае?
Пожалуйста, сообщите.
3 answers
Поместите файлы где-нибудь за пределами общедоступного каталога webroot или настройте свой сервер так, чтобы он не обслуживал файлы. До тех пор, пока ваш сервер будет с радостью обслуживать все с действительным URL-адресом, вы ничего не сможете сделать с PHP, чтобы предотвратить это.
Если ваши файлы находятся в папке /public_html/
, извлеките их из этой папки и поместите, например, в /secret_files/
, чтобы ваша структура каталогов выглядела примерно так:
public_html/
index.html
admin/
admin_index.php
secret_files/
my_secret_file.txt
Веб-сервер настроен только для обслуживания файлов в /public_html/
каталог, поэтому никто не будет иметь доступа к каталогам за пределами (технический термин выше).
Чтобы все еще позволить кому-то загружать эти файлы, сделайте так, как предлагает Клетус, и используйте readfile
"вручную обслуживать" файлы с помощью PHP-скрипта. PHP по-прежнему будет иметь доступ к этим другим частям файловой системы, поэтому вы можете использовать его в качестве привратника.
Не храните файлы в каталоге в корневом каталоге документа.
Вместо этого переместите их в другое место, а затем PHP-скрипт может программно определить, может ли кто-то загрузить их, а затем использовать readfile()
или что-то подобное, чтобы передавать их пользователю.
Вы также можете настроить веб-сервер так, чтобы он не обслуживал файлы из этого каталога, но тогда вам все равно понадобится PHP для их обслуживания. Чище просто не помещать их в корневой каталог документа.
Ответ на вопрос о том, как защитить паролем с помощью PHP: Это должно решить вашу проблему.