Назад | Перейти на главную страницу

Что делает директива Apache Satisfy?

Я наткнулся на httpd.conf директива, которую я не могу понять:

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
  Satisfy All
</Files>

Согласно док , Я бы сказал, что Satisfy не имеет никакого эффекта, так как нет Allow. Я ошибся? Как вы думаете, что делает эта директива?

TL; DR;
В большинстве случаев в этой строке нет необходимости, так как Satisfy All является обычно настройка сервера по умолчанию. Если в этом случае линия не является строго необходимой.

Строка добавлена ​​в качестве дополнительной безопасности: «На всякий случай» сервер был настроен для использования Satisfy Any установка по умолчанию.
Если сервер был специально настроен с помощью Satisfy Any установка, вы определенно хотеть чтобы переопределить этот параметр, включив Satisfy All директива для защиты файлов, таких как .htaccess.

Я не уверен, что файл htaccess переопределит директиву сервера по умолчанию «Satisfy» для всех папок в указанном файле htaccess или ниже.

Для общего кода, размещенного в Интернете, особенно когда он сообщает вам, как правильно защитить .htaccess файлы, плакат несет ответственность, так как не делает никаких предположений о настройках вашего сервера, которые могут подорвать безопасность документа. Включение этой «дополнительной» строки гарантирует, что к вашим файлам htacess будет применен более безопасный параметр. Добавление директивы заставляет блок кода работать 100% времени, вместо того, чтобы оставлять на волю случайные файлы htaccess для небольшого набора серверов, которые настроены по-другому.

В соответствии с документация apache:

Satisfy Any|All:

Как ограничения доступа на основе хоста, так и аутентификация на основе пароля могут быть реализованы одновременно. В этом случае директива Satisfy используется для определения того, как взаимодействуют два набора ограничений.

...используется в <Directory>, <Files>, и <Location> разделы, а также .htaccess

Эта директива полезна только в том случае, если доступ к определенной области ограничен как именем пользователя / паролем, так и адресом хоста клиента. В этом случае поведение по умолчанию (Все) состоит в том, чтобы потребовать, чтобы клиент прошел ограничение доступа к адресу и ввел действительное имя пользователя и пароль. С опцией Any клиент получит доступ, если он либо преодолеет ограничение хоста, либо введет действительное имя пользователя и пароль.

Поскольку значение по умолчанию обычно является Satisfy All (единственный другой вариант - Satisfy Any), вы можете не заметить разницы, если включите эту директиву. Однако файл конфигурации вашего сервера (или? Может быть, файл .htaccess в родительском каталоге ?? - я не уверен, возможно ли это или нет) может переопределить сервер по умолчанию. В любом случае, добавив Satisfy All Директива последовательно обеспечивает применение надлежащих мер безопасности.

Включив Satisfy All директиве, вы обеспечиваете более высокий уровень безопасности для этих файлов, независимо от настройки в конфигурации вашего сервера.

В ссылке на документ упоминаются некоторые варианты использования, когда вы можете вместо этого использовать Satisfy Any.

Поскольку я не могу комментировать, я добавлю здесь, что ответ @SherylHohman - лучший ответ, потому что он является важно для дополнительной безопасности. Таким образом, технически неверно утверждать, что без него он не действует (в отличие от принятого ответа), поскольку вы по-прежнему необходимо учитывать остальную часть конфигурации сервера. Однако я хотел бы добавить к ответу @SherylHohman:

  1. Файл конфигурации сервера (например, /etc/httpd/conf/httpd.conf) мог иметь более обобщенный Satisfy Any заявление. Например, это важно, поскольку кто-то может потребовать имя пользователя / пароль для доступа ко всем сайтам на своем сервере (например, через Require group [name), а затем разрешить обход с определенного IP-адреса или набора IP-адресов через Allow from [ip], поэтому, если это было пропущено, .htaccess будет открыт, потому что Satisfy Any пришлось бы объявить.

  2. Справочники на или выше конкретный .htaccess файл не повлияет если только Они <Files> раздел, который также специально соответствует .htaccess который затем переопределит это правило вместе с конфигурацией сервера, также содержащей необходимые AllowOverride директивы (например, Limit или All). Я говорю, что это должно быть <File> потому что это то, что используется в конфигурации сервера, и они обрабатываются после <Directory> уровень (т.е. корневой уровень .htaccess). Это потому что <File> разделы объединяются позже и мне кажется, что .htaccess конечно обрабатывается после конфигурации сервера.

Я был бы согласен с вами, удовлетворение всех ничего не делает - без этого эти файлы все равно были бы запрещены.