Spec-Zone.ru › Apache HTTP Server

Контроль доступа

Контроль доступа — это любые средства управления доступом к ресурсам. Он отличается от аутентификации и авторизации.

Связанные модули и директивы

Контроль доступа можно реализовать с помощью нескольких различных модулей. Наиболее важные из них — 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API