У меня есть разные подпапки на моем веб-сайте, и я хотел бы, чтобы у пользователя не было доступа к ним через URL-адрес, но в то же время мои основные файлы PHP могли включать их или использовать в качестве действий над формами или ссылками.
Я пробовал использовать .htaccess с
<Files *> Order Allow,Deny Deny from All </Files>
но он отказал в доступе даже из моих собственных сценариев. Логично, как я узнал, но я не знаю, как заставить его работать. Есть идеи?
PS Моя основная проблема заключается в том, что некоторые из файлов не включены в основные файлы PHP, но они связаны там, и их код заканчивается header('Location: ../index.php');
возвращаясь на главную страницу проекта.
Я вижу много ответов с помощью Разрешить, Запретить Запретить, Разрешить
Порядок этого имеет значение и вызывает проблему. Вы говорите компьютеру, что отрицание важнее, чем разрешить, потому что оно указано последним. Чтобы показать вам … если вы скажете:
<Files .htaccess> Order Allow,Deny Deny From All Allow From xxx.xxx.xxx.xxx 127.0.0.1 </Files>
Вы говорите сначала «Разрешить кому угодно», затем «Запретить все» … Что все еще отрицает ВСЕ.
Если вы измените значение на «Запретить», разрешите вам говорить «Запретить все», а затем «Разрешить кому угодно».
<Files .htaccess> Order Deny,Allow Deny From All Allow From xxx.xxx.xxx.xxx 127.0.0.1 </Files>
Разрешить команду, будучи более важной, потому что она является последней командой, поэтому позволяет использовать перечисленные после команды «Разрешить».
xxx.xxx.xxx.xxx = Ваш IP-адрес
Сделай это:
<Files *> Order Deny,Allow Allow from 192.168.100.123 127.0.0.1 Deny from all </Files>
Список IP-адресов будет определенными вами хостами, такими как localhost.
Это также работает с директивой, а не только с файлом, если вы хотите заблокировать только определенные каталоги.
Существует еще более безопасный метод. Храните ваши включенные файлы под доступными в Интернете папками. Итак, если ваши веб-файлы здесь …
/var/www/mysite.com/
Сохраните ваши включенные файлы здесь:
/ Var / включает /
Затем включите их с полным путем …
include '/var/includes/myincludes.inc.php';
Из Интернета файл myincludes.inc.php полностью недоступен.
Обычно для защиты этих логических файлов от открытого доступа вы можете
if(!is_defined(some_root_const)){die();}
введите код приложения вне общедоступной html-папки. то вы можете добавить путь включения вверху ваших сценариев, чтобы ваш скрипт мог получить к ним доступ, как если бы они были в одной папке.
В вас .htaccess вам нужно будет указать, какие IP-адреса, хосты вы хотите разрешить, и вы можете сделать это для каждого каталога. например,
<Directory /dir/to/block> Order Allow,Deny Allow from 192.168.0.1 4.4.4.4 Deny from All </Directory> <Directory /dir/to/allow> Order Allow, Deny Allow from All </Directory>