.htaccess Order Allow,Deny или Deny,Allow

Директива Order, вместе с директивами Allow и Deny, контролирует трёх-шаговую систему контроля доступа. Первый шаг обрабатывает или все директивы Allow, или все директивы Deny. Второй шаг разбирает оставшуюся директиву (Deny или Allow). Третий шаг принимает все запросы, которые не соответствуют ни первой, ни второй.

Директивы, Allow и Deny, обрабатываются, нетипично поведению сетевых экранов (firewall), где используется только первая директива. Результирующим является последнее соответствие (также нетипично поведению сетевых экранов).

Order Deny,Allow
 Deny from all
 Allow from 192.168.1.*
В данном примере, если пытаться следовать логике firewall, запрет доступа реализован для всех хостов, и разрешение 192.168.1.* не сработает, в то время, как в соответствии с принципами рассматриваемых конфигурационных файлов apache (в том числе cupsd.conf) доступ хостам из подсети 192.168.1.* разрешён.

Дополнительно, порядок, в котором строки следуют в конфигурационном файле не существенен — все строки Allow выполняются как единая группа, все строки Deny, соответственно, как другая группа, и умолчательное состояние рассматривается отдельно.
Порядок может быть одним из:

  • Allow,Deny
    Сперва, проверяются все директивы Allow; по крайней мере одна должна соответствовать, или запрос отвергается. Далее, провеляются все директивы Deny. Если какие-либо соответствуют, то запрос отвергается. В конце, любой запрос, который не соответствует директиве Allow или Deny отвергается по умолчанию.

  • Deny,Allow
    Сперва, проверяются все директивы Deny; если какая-либо соответствует, то запрос отвергается, если нет соответствия в директиве Allow. Любой запрос, который не соответствует директиве Allow или Deny пропускается.
Ключевые слова могут быть разделены только запятой, никакие пробелы между ними не допустимы.

СоответствиеРезультат Allow,DenyРезультат Deny,Allow
Соответствует только AllowЗапрос разрешёнЗапрос разрешён
Соответствует только DenyЗапрос отклонёнЗапрос отклонён
Нет соответствийПо умолчанию действует вторая директива: отклонёнПо умолчанию действует вторая директива: разрешён
Соответствуют обе Allow & DenyУправляет конечное соответствие: отклонёнУправляет конечное соответствие: разрешён

В нижеприведённом примере, всем хостам в подсети 192.168.1.* доступ разрешён.

Order Deny,Allow
Deny from all
Allow from 192.168.1.*
В следующем примере, всем хостам из подсети 192.168.1.* доступ разрешён, за исключением хостов 192.168.1.5 и 192.168.1.24, всем другим хостам из других подсетей доступ запрещён, т.к. для сервера состояние по умолчанию Deny, отказать в доступе.

Order Allow,Deny
Allow from 192.168.1.*
Deny from 192.168.1.5
Deny from 192.168.1.24
С другой стороны, если порядок в директиве Order в последнем примере поменять на Deny,Allow, всем хостам доступ будет разрешён. Это случится потому, что не считая актуальным следование директив в конфигурационном файле, данная директива Allow из 192.168.1.* будет сверена последней, и перекроет отказ в доступе с 192.168.1.5 и 192.168.1.24 директивы Deny. Всем хостам не из 192.168.1.* также будет разрешён доступ, т.к. состояние по умолчанию — Allow.
Прочли: 21213 | Добавлено: 30 июня 2011 | На главную