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. Можно использовать как 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]

Это вернёт ответ 403 Forbidden для любого запроса после 20:00 или до 7:00. Этот метод можно использовать для любых проверяемых вами критериев. Вы также можете перенаправить или иначе переписать эти запросы, если предпочтительнее.

Директива <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