Каким образом можно предотвратить прямой доступ к определенным каталогам веб-сайта?
1- Создание и размещение файла .htaccess
в каждом каталоге, который мы хотим защитить, и поместить в него следующую строку:
Deny from all
2- Создание и размещение файла index.php
в каждом каталоге, который мы хотим защитить, и размещать в нем только следующую строку кода (которая будет перенаправляться на домашнюю страницу веб-сайта):
<?php header("Location: http://" . $_SERVER['HTTP_HOST']); ?>
3- Что-то еще (что это такое?)
Как упоминалось в комментариях, самым безопасным способом является размещение контента или каталогов за пределами открытого документа веб-сервера. Это гарантирует, что контент не будет обслуживаться, даже если файл .htaccess будет удален или если сервер не разрешит переопределение .htaccess
.
Чтобы определить корень вашего документа, вы можете просто $_SERVER['DOCUMENT_ROOT']
переменную PHP $_SERVER['DOCUMENT_ROOT']
. Поэтому, если ваш корень /var/www/html
, вы можете создать папку /var/www/protected_folder
а Apache (или другой веб-сервер) никогда не будет служить ему (если только файл http.conf не изменен для изменения корневой папки документа ).
Если папка должна быть в корне документа, то использование файла .htaccess
для DENY
или перенаправления является хорошей альтернативой.
Как упоминал TerryE, вы также можете использовать разрешения файлов на уровне ОС, чтобы запретить пользователю Apache доступ к папке (например, установить другого пользователя в качестве владельца, а затем установить разрешение на папку до 700
). Если они попытаются получить доступ к папке, они получат 403 Forbidden Error, которые вы не захотите показывать (хотя вы можете настроить собственный обработчик ошибок 403 в http.conf
или htaccess
). В зависимости от того, что вы пытаетесь сделать, вам может потребоваться такой подход, так как он также позволит вам запретить доступ к скриптам (например, PHP include()
т. Д.), Если вы хотите, поскольку PHP работает под пользователем веб-сервера по умолчанию. Основным недостатком этого подхода является то, что разрешения на доступ к файлам часто не сохраняются во время миграции (если они выполняются неправильно), а разрешения файлов иногда могут быть случайно сброшены при изменении разрешений родительских папок с помощью рекурсивного флага (в то время как маловероятно, что кто-то нечаянно переместите папку в корень документа).