.htaccess, порядок разрешить, отрицать, отрицать от всех: путать? - PullRequest
17 голосов
/ 22 февраля 2011

В моем .htaccess у меня есть следующее:

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
<Files .htaccess>
order allow,deny
deny from all
</Files>

Теперь я просто глуп или что-то не так? Я посмотрел в Интернете и в документации по Apache и не понимаю limit get post put delete и т. Д., Но я выразил это, думая, что все, что он делает, говорит, что разрешает, затем после разрешения снова отрицает? Это просто не имеет смысла для меня, и я не уверен, должен ли я удалить это из .htaccess, или исправить это, если неправильно? Я предполагаю, что третий означает запретить доступ к файлу .htaccess, но этот порядок разрешений затем запрещает, кажется, что сначала он разрешает, а затем сразу же отказывает.

1 Ответ

30 голосов
/ 23 февраля 2011

Это довольно запутанный способ использования директив конфигурации Apache.

Технически, первый бит эквивалентен

Allow From All

Это потому, что Order Deny,Allow делает директиву Deny оцененной перед директивами Allow. В этом случае Deny и Allow конфликтуют друг с другом, но Allow, будучи последним оцененным, будет соответствовать любому пользователю, и доступ будет предоставлен.

Теперь, чтобы прояснить ситуацию, этот тип конфигурации является ПЛОХОЙ, и его следует избегать любой ценой, поскольку он ограничивает неопределенное поведение.

Разделы Limit определяют, какие методы HTTP имеют доступ к каталогу, содержащему файл .htaccess.

Здесь методам GET и POST разрешен доступ, а методам PUT и DELETE запрещен доступ. Вот ссылка, объясняющая, что представляют собой различные методы HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

Однако использовать эти ограничения более чем часто бесполезно, если у вас нет пользовательских сценариев CGI или модулей Apache, которые непосредственно обрабатывают нестандартные методы (PUT и DELETE), поскольку по умолчанию Apache не обрабатывает их вообще.

Следует также отметить, что существует несколько других методов, которые также могут обрабатываться Limit, а именно: CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK и UNLOCK.

Последний бит также, безусловно, бесполезен, поскольку любая правильно настроенная установка Apache содержит следующий фрагмент конфигурации (для Apache 2.2 и более ранних версий):

#
# The following lines prevent .htaccess and .htpasswd files from being 
# viewed by Web clients. 
#
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

, который запрещает доступ к любому файлу, начинающемуся с ".ht".

Эквивалентная конфигурация Apache 2.4 должна выглядеть следующим образом:

<Files ~ "^\.ht">
    Require all denied
</Files>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...