.htaccess разрешить доступ к файлам только из включений - PullRequest
6 голосов
/ 22 марта 2012

У меня есть разные подпапки на моем веб-сайте, и я бы хотел, чтобы пользователь не мог получить к ним доступ через URL, но в то же время мои основные файлы PHP могли включать их или использовать в качестве действий в формах или ссылках ,

Я пытался использовать .htaccess с

<Files *>
    Order Allow,Deny
    Deny from All
</Files>

но он запретил доступ даже из моих собственных сценариев. Логично, как я узнал, но я не знаю, как заставить это работать. Есть идеи?

P.S. Моя основная проблема заключается в том, что некоторые файлы не включены в основные файлы PHP, НО они связаны там, и их код заканчивается header('Location: ../index.php'); возвратом на главную страницу проекта.

Ответы [ 6 ]

7 голосов
/ 08 октября 2012

Я вижу много ответов: Разрешить, Запретить, не Запретить, Разрешить

Порядок это имеет значение и вызывает проблему. Вы говорите компьютеру, что отрицать важнее, чем разрешить, потому что он указан последним. Чтобы показать вам ... если вы скажете:

<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

3 голосов
/ 22 марта 2012

Сделайте следующее:

<Files *>
    Order Deny,Allow 
    Allow from 192.168.100.123 127.0.0.1
    Deny from all
</Files>

В списке IP-адресов будут указаны разрешенные вами хосты, например localhost.

Это также работает с директивой, а не только с файлом, если вы хотитенекоторые каталоги заблокированы.

3 голосов
/ 22 марта 2012

Есть еще более безопасный метод. Храните включаемые файлы под папками, доступными через Интернет. Так что, если ваши веб-файлы здесь ...

/ вар / WWW / mysite.com /

Храните включаемые файлы здесь:

/ вар / включает /

Затем включите их с полным путем ...

include '/var/includes/myincludes.inc.php';

Из Интернета файл myinclude.inc.php полностью недоступен.

1 голос
/ 22 марта 2012

поместите код приложения вне вашей общедоступной html-папки. затем вы можете добавить путь включения в начало ваших сценариев, чтобы позволить вашему сценарию получать к ним доступ, как если бы они находились в одной папке.

http://php.net/manual/en/function.set-include-path.php

1 голос
/ 22 марта 2012

Обычно для защиты этих логических файлов от публичного доступа вы можете

  1. поместить их в защищенный каталог, над htdocs
  2. добавить проверку на публичную константу.*
  3. изменить расширение на .inc или что-то еще ... и запретить .htaccess на основании этого
0 голосов
/ 22 марта 2012

В вашем .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>
...