Контроль доступа
Контроль доступа — это любые средства управления доступом к ресурсам. Он отличается от аутентификации и авторизации.
Связанные модули и директивы
Контроль доступа можно реализовать с помощью нескольких различных модулей. Наиболее важные из них — mod_authz_core и mod_authz_host. В этом документе также рассматривается контроль доступа с помощью mod_rewrite.
Контроль доступа по адресу узла
Если вы хотите ограничить доступ к разделам сайта на основе адреса узла, с которого обращаются посетители, проще всего это сделать с помощью mod_authz_host.
Директива Require предоставляет различные способы разрешения или запрета доступа к ресурсам. В сочетании с директивами RequireAll, RequireAny и RequireNone эти требования можно комбинировать сколь угодно сложным образом, чтобы реализовать любую необходимую политику доступа.
Директивы Allow, Deny и Order, предоставляемые модулем mod_access_compat, объявлены устаревшими и будут удалены в будущей версии. Не используйте их и избегайте устаревших руководств, в которых рекомендуется их применение.
Эти директивы используются следующим образом:
Require host address Require ip ip.address
В первой форме address — это полное доменное имя (или его часть); при необходимости можно указать несколько адресов или доменных имён.
Во второй форме ip.address — это IP-адрес, часть IP-адреса, пара сеть/маска сети или запись сети в формате CIDR с префиксом /nnn. Можно использовать адреса IPv4 или IPv6.
Дополнительные примеры такого синтаксиса приведены в документации mod_authz_host.
Чтобы инвертировать определённое требование, можно добавить not. Обратите внимание: поскольку not инвертирует значение, его нельзя использовать отдельно для разрешения или запрета запроса, так как не истинно не означает ложно. Поэтому для запрета посещения с помощью инверсии в блоке должен быть элемент, значение которого оценивается как истинное или ложное. Например, если кто-то рассылает спам на вашей доске объявлений и вы хотите закрыть ему доступ, можно сделать следующее:
<RequireAll>
Require all granted
Require not ip 10.252.46.165
</RequireAll> Посетители с этого адреса (10.252.46.165) не смогут видеть содержимое, на которое распространяется действие этой директивы. Если вместо IP-адреса у вас есть имя компьютера, можно использовать его.
Require not host host.example.com
Чтобы заблокировать доступ со всего домена, можно указать только часть адреса или доменного имени:
Require not ip 192.168.205 Require not host phishers.example.com moreidiots.example Require not host gov
Директивы RequireAll, RequireAny и RequireNone можно использовать для реализации более сложных наборов требований.
Контроль доступа по произвольным переменным
С помощью <If> можно разрешать или запрещать доступ на основе произвольных переменных окружения или значений заголовков запроса. Например, чтобы запретить доступ на основе user-agent (типа браузера), можно сделать следующее:
<If "%{HTTP_USER_AGENT} == 'BadBot'">
Require all denied
</If> Это также можно записать с помощью синтаксиса Require expr следующим образом:
Require expr %{HTTP_USER_AGENT} != 'BadBot' Предупреждение:
Контроль доступа по User-Agent — ненадёжный метод, поскольку конечный пользователь может задать заголовок User-Agent произвольным образом.
Дополнительные сведения о доступных синтаксисах выражений и переменных см. в документации по выражениям.
Контроль доступа с помощью mod_rewrite
Флаг [F] RewriteRule приводит к отправке ответа 403 Forbidden. С его помощью можно запретить доступ к ресурсу на основе произвольных критериев.
Например, если нужно блокировать доступ к ресурсу с 20:00 до 7:00, это можно сделать с помощью mod_rewrite.
RewriteEngine On
RewriteCond "%{TIME_HOUR}" ">=20" [OR]
RewriteCond "%{TIME_HOUR}" "<07"
RewriteRule "^/fridge" "-" [F] Для любого запроса после 20:00 или до 7:00 будет возвращён ответ 403 Forbidden. Этот метод можно использовать для проверки любых нужных критериев. Если такой подход предпочтительнее, запросы также можно перенаправлять или переписывать иным образом.
Директива <If>, добавленная в версии 2.4, заменяет многие задачи, для решения которых традиционно использовался mod_rewrite, поэтому, прежде чем прибегать к mod_rewrite, сначала следует обратиться к ней.
Дополнительная информация
Механизм выражений позволяет выполнять множество действий на основе произвольных переменных сервера. Дополнительные сведения см. в соответствующем документе.
Также ознакомьтесь с документацией mod_authz_core, где приведены примеры объединения нескольких требований доступа и указания того, как они взаимодействуют.
См. также руководство по аутентификации и авторизации.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/howto/access.html