Что делает директива Apache Satisfy?
Я наткнулся на httpd.conf
директива, которую я не могу понять:
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
Согласно документу, я бы сказал, что Satisfy
не имеет никакого эффекта, так как нет Allow
, Я ошибся? Как вы думаете, что делает эта директива?
4 ответа
TLDR;
В большинстве случаев эта строка не является строго необходимой, так как Satisfy All
обычно это настройка сервера по умолчанию. В этом случае линия не является строго необходимой.
Строка добавлена в качестве дополнительной защиты, "просто в случае", сервер был настроен на использование Satisfy Any
установка по умолчанию.
Если сервер был преднамеренно настроен с использованием параметра "Удовлетворять любого", вы можете переопределить этот параметр, добавив Satisfy All
директива для защиты файлов, таких как .htaccess
,
Я не уверен, что файл htaccess может переопределить стандартную директиву "Satisfy" сервера для всех папок в или ниже указанного файла htaccess или нет.
Для общего кода, размещенного в Интернете, особенно когда он говорит вам, как правильно обезопасить .htaccess
Авторы несут ответственность, не делая никаких предположений о настройках вашего сервера, которые могут подорвать безопасность документа. Включение этой "дополнительной" строки обеспечивает более безопасную настройку ваших файлов htacess. Добавление директивы заставляет блок кода работать 100% времени, вместо того, чтобы случайно раскрыть файлы htaccess для небольшого набора серверов, которые настроены по-разному.
Согласно документации Apache:
Satisfy Any|All
:Как ограничения доступа на основе хоста, так и аутентификация на основе пароля могут быть реализованы одновременно. В этом случае директива Satisfy используется для определения того, как взаимодействуют два набора ограничений.
...используется в
<Directory>
,<Files>
, а также<Location>
разделы, а также.htaccess
Эта директива полезна, только если доступ к определенной области ограничен как именем пользователя / паролем, так и адресом хоста клиента. В этом случае по умолчанию (Все) требуется, чтобы клиент проходил ограничение доступа к адресу и вводил правильное имя пользователя и пароль. С опцией Любой клиенту будет предоставлен доступ, если он либо пройдет ограничение хоста, либо введет правильное имя пользователя и пароль.
Поскольку значение по умолчанию Satisfy All
(единственный другой вариант Satisfy Any
), вы можете не заметить разницы при включении этой опции. Однако файл конфигурации вашего сервера (или "возможно, файл.htaccess в родительском каталоге" - я не уверен, возможно ли это или нет) может переопределить это значение по умолчанию.
Включая 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
конечно обрабатывается после конфига сервера.
Что касается меня, когда я пытался ограничить доступ к самому файлу .htaccess, где мое приложение работает на AWS Elastic Beanstalk, я использовал приведенный ниже фрагмент кода в файле конфигурации:
<Files ~ "^.*.([Hh][Tt][Aa])"> Приказать разрешить, запретить Запретить от всех
Это ограничило полный доступ. Но мой веб-сайт начал давать сбой, и я не смог получить доступ к индексу или странице входа. После использования «Удовлетворить всех» все работало отлично.
<Files ~ "^.*.([Hh][Tt][Aa][Cc][Cc][Ee][Ss][Ss])"> Приказать разрешить, запретить Запретить все Удовлетворить все
По моему мнению, это важно, если по умолчанию вы хотите, чтобы сервер читал этот файл, но доступ внешнего мира должен быть заблокирован.