Я наткнулся на 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:
Файл конфигурации сервера (например, /etc/httpd/conf/httpd.conf
) мог иметь более обобщенный Satisfy Any
заявление. Например, это важно, поскольку кто-то может потребовать имя пользователя / пароль для доступа ко всем сайтам на своем сервере (например, через Require group [name
), а затем разрешить обход с определенного IP-адреса или набора IP-адресов через Allow from [ip]
, поэтому, если это было пропущено, .htaccess
будет открыт, потому что Satisfy Any
пришлось бы объявить.
Справочники на или выше конкретный .htaccess
файл не повлияет если только Они <Files>
раздел, который также специально соответствует .htaccess
который затем переопределит это правило вместе с конфигурацией сервера, также содержащей необходимые AllowOverride
директивы (например, Limit
или All
). Я говорю, что это должно быть <File>
потому что это то, что используется в конфигурации сервера, и они обрабатываются после <Directory>
уровень (т.е. корневой уровень .htaccess
). Это потому что <File>
разделы объединяются позже и мне кажется, что .htaccess
конечно обрабатывается после конфигурации сервера.
Я был бы согласен с вами, удовлетворение всех ничего не делает - без этого эти файлы все равно были бы запрещены.