Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101      102      103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 102. Модуль Apache mod_auth_form

Аутентификация формы зависит от mod_session модулей, и эти модули используют файлы cookie HTTP и, как таковые, могут стать жертвой атак межсайтового скриптинга или раскрыть потенциально личную информацию клиентам. Пожалуйста, убедитесь, что соответствующие риски были приняты во внимание, прежде чем включать функции сеанса на вашем сервере.

Этот модуль позволяет использовать форму входа в формате HTML для ограничения доступа путем поиска пользователей в заданных провайдерах. HTML-формы требуют значительно большей настройки, чем альтернативы, однако HTML-форма входа может обеспечить гораздо более удобный интерфейс для конечных пользователей.

Базовая аутентификация HTTP обеспечивается mod_auth_basic , а дайджест-аутентификация HTTP — mod_auth_digest . Этот модуль должен сочетаться как минимум с одним модулем аутентификации, например, mod_authn_file и одним модулем авторизации, например mod_authz_user .

После успешной аутентификации пользователя его данные для входа будут сохранены в сеансе, предоставленном mod_session .

Базовая конфигурация

Чтобы защитить конкретный URL-адрес с помощью mod_auth_form , вам нужно решить, где вы будете хранить свою сессию , и вам нужно будет решить, какой метод вы будете использовать для аутентификации. В этом простом примере данные для входа будут храниться в сеансе на основе mod_session_cookie , а аутентификация будет предпринята для файла с использованием mod_authn_file . Если аутентификация не удалась, пользователь будет перенаправлен на страницу входа в форму.

Базовый пример

 <Расположение "/admin">
 Файл AuthFormProvider
 AuthUserFile "conf/passwd"
 Форма AuthType
 Имя авторизации "/admin"
 AuthFormLoginRequiredLocation "http://example.com/login.html"
 Сессия включена
 Путь сеанса SessionCookieName=/
 Требовать действительного пользователя
</местоположение> 

Директива AuthType включит mod_auth_form аутентификацию, если задана форма значения . Директивы AuthFormProvider и AuthUserFile указывают, что имена пользователей и пароли должны сверяться с выбранным файлом.

Директивы Session и SessionCookieName сеанс хранятся в файле cookie HTTP в браузере. Дополнительные сведения о различных параметрах настройки сеанса см. в документации по mod_session .

При желании вы можете добавить SessionCryptoPassphrase для создания зашифрованного файла cookie сеанса. mod_session_crypto Это потребовало загрузки дополнительного модуля .

В приведенном выше простом примере URL-адрес был защищен с помощью mod_auth_form , но пользователю еще не была предоставлена возможность ввести свое имя пользователя и пароль. Варианты для этого включают предоставление специальной отдельной страницы входа для этой цели или предоставление встроенной страницы входа.

Автономный вход

Форма входа может быть размещена как отдельная страница или может быть встроена в ту же страницу.

При настройке входа в качестве отдельной страницы неудачные попытки аутентификации должны быть перенаправлены на форму входа, созданную веб-сайтом для этой цели, с помощью директивы AuthFormLoginRequiredLocation . Обычно эта страница входа будет содержать HTML-форму, запрашивающую у пользователя имя пользователя и пароль.

Пример формы входа

 <form method="POST" action="/dologin.html">
 Имя пользователя: <input type="text" name="httpd_username" value="" />
 Пароль: <input type="password" name="httpd_password" value="" />
 <input type="submit" name="login" value="Login" />
</форма> 

Часть, которая выполняет фактический вход в систему, обрабатывается form-login-handler . Действие формы должно указывать на этот обработчик, который настроен в Apache httpd следующим образом:

Пример обработчика входа в форму

 <Местоположение "/dologin.html">
 SetHandler форма-логин-обработчик
 AuthFormLoginRequiredLocation "http://example.com/login.html"
 AuthFormLoginSuccessLocation "http://example.com/admin/index.html"
 Файл AuthFormProvider
 AuthUserFile "conf/passwd"
 Форма AuthType
 Имя авторизации /admin
 Сессия включена
 Путь сеанса SessionCookieName=/
</местоположение> 

URL-адреса, указанные в AuthFormLoginRequiredLocation директиве, обычно указывают на страницу, объясняющую пользователю, что его попытка входа в систему не удалась, и ему следует повторить попытку. Директива AuthFormLoginSuccessLocation указывает URL-адрес, на который должен быть перенаправлен пользователь после успешного входа в систему.

Кроме того, URL-адрес для перенаправления пользователя в случае успеха может быть встроен в форму входа, как в примере ниже. В результате один и тот же обработчик формы входа в систему можно повторно использовать для разных областей веб-сайта.

Пример формы входа с указанием местоположения

 <form method="POST" action="/dologin.html">
 Имя пользователя: <input type="text" name="httpd_username" value="" />
 Пароль: <input type="password" name="httpd_password" value="" />
 <input type="submit" name="login" value="Login" />
 <input type="hidden" name="httpd_location" value="http://example.com/success.html" />
</форма> 

Встроенный вход

Предупреждение

Существует риск того, что при определенных обстоятельствах форма входа, настроенная с использованием встроенного входа, может быть отправлена более одного раза, раскрывая учетные данные для входа в приложение, работающее под ним. Администратор должен обеспечить надлежащую защиту базового приложения для предотвращения злоупотреблений. Если вы сомневаетесь, используйте автономную конфигурацию входа.

В качестве альтернативы специальной странице входа на веб-сайт можно настроить mod_auth_form внутреннюю аутентификацию пользователей без перенаправления на другую страницу. Это позволяет сохранить состояние текущей страницы при попытке входа в систему. Это может быть полезно в ситуации, когда действует ограниченный по времени сеанс, и время сеанса истекает в середине запроса пользователя. Пользователь может пройти повторную аутентификацию на месте и продолжить с того места, на котором остановился.

Если пользователь, не прошедший проверку подлинности, пытается получить доступ к защищенной странице, mod_auth_form которая не настроена с помощью AuthFormLoginRequiredLocation директивы, в браузер возвращается код состояния HTTP_UNAUTHORIZED , указывающий пользователю, что он не авторизован для просмотра страницы.

Чтобы настроить встроенную аутентификацию, администратор заменяет документ об ошибке, возвращаемый кодом состояния HTTP_UNAUTHORIZED , на настраиваемый документ об ошибке, содержащий форму входа, следующим образом:

Основной встроенный пример

 Файл AuthFormProvider
ErrorDocument 401 "/login.shtml"
AuthUserFile "conf/passwd"
Форма AuthType
Область AuthName
AuthFormLoginRequiredLocation "http://example.com/login.html"
Сессия включена
Путь сеанса SessionCookieName=/ 

Страница документа об ошибке должна содержать форму входа с пустым свойством действия, как в примере ниже. Это приводит к отправке формы на исходный защищенный URL-адрес, при этом странице не нужно знать, что это за URL-адрес.

Пример встроенной формы входа

 <метод формы="POST" действие="" >
 Имя пользователя: <input type="text" name="httpd_username" value="" />
 Пароль: <input type="password" name="httpd_password" value="" />
 <input type="submit" name="login" value="Login" />
</форма> 

Когда конечный пользователь введет свои данные для входа, форма отправит HTTP-запрос POST на исходный защищенный паролем URL-адрес. mod_auth_form перехватит этот POST-запрос, и если будут обнаружены поля HTML для имени пользователя и пароля, пользователь войдет в систему, и исходный URL-адрес, защищенный паролем, будет возвращен пользователю в качестве запроса GET.

Встроенный вход с сохранением тела

Ограничение метода встроенного входа в систему, описанного выше, заключается в том, что если POST-форма HTML привела к запросу на аутентификацию или повторную аутентификацию, содержимое исходной формы, отправленной браузером, будет потеряно. В зависимости от функции веб-сайта это может представлять значительные неудобства для конечного пользователя.

mod_auth_form решает эту проблему, позволяя встраивать метод и тело исходного запроса в форму входа. Если аутентификация прошла успешно, Apache httpd повторит исходный метод и тело, сохранив состояние исходного запроса.

Чтобы включить сохранение тела, добавьте в форму входа три дополнительных поля, как показано в примере ниже.

Пример с сохранением тела

 <метод формы="POST" действие="">
 Имя пользователя: <input type="text" name="httpd_username" value="" />
 Пароль: <input type="password" name="httpd_password" value="" />
 <input type="submit" name="login" value="Login" />
 
<input type="hidden" name="httpd_method" value="POST" /> <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" /> <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" />
</form>

То, как метод, mimetype и тело исходного запроса встроены в форму входа, будет зависеть от платформы и технологии, используемых на веб-сайте.

Один из вариантов — использовать mod_include модуль вместе с KeptBodySize директивой вместе с подходящим сценарием CGI для встраивания переменных в форму.

Другой вариант — визуализировать форму входа с помощью сценария CGI или другой динамической технологии.

Пример компьютерной графики

 Файл AuthFormProvider
 ErrorDocument 401 "/cgi-bin/login.cgi"
 ... 

Выход

Чтобы пользователь мог выйти из определенного сеанса, настройте страницу для обработки form -logout-handler . Любая попытка получить доступ к этому URL-адресу приведет к удалению имени пользователя и пароля из текущего сеанса, что приведет к выходу пользователя из системы.

Установив AuthFormLogoutLocation директиву, можно указать URL-адрес, на который будет перенаправлен браузер при успешном выходе из системы. Этот URL-адрес может объяснить пользователю, что он вышел из системы, и дать пользователю возможность снова войти в систему.

Базовый пример выхода из системы

 SetHandler форма-выход-обработчик
Область AuthName
AuthFormLogoutLocation "http://example.com/loggedout.html"
Сессия включена
Путь сеанса SessionCookieName=/ 

Обратите внимание, что выход пользователя из системы не удаляет сеанс; он просто удаляет имя пользователя и пароль из сеанса. Если это приведет к пустому сеансу, чистым эффектом будет удаление этого сеанса, но это не гарантируется. Если вы хотите гарантировать удаление сеанса, установите для SessionMaxAge директивы небольшое значение, например 1 (установка директивы на ноль будет означать отсутствие ограничения по возрасту сеанса).

Пример истечения базового сеанса

 SetHandler форма-выход-обработчик
AuthFormLogoutLocation "http://example.com/loggedout.html"
Сессия включена
SessionMaxAge 1
Путь сеанса SessionCookieName=/ 

Имена пользователей и пароли

Обратите внимание, что отправка формы включает URLEncoding данных формы: в данном случае имя пользователя и пароль. Поэтому вам следует выбирать имена пользователей и пароли, которые избегают символов, которые закодированы в URL-адресе при отправке формы, иначе вы можете получить неожиданные результаты.



Директива AuthFormAuthoritative

Описание:Устанавливает, передаются ли авторизация и аутентификация модулям более низкого уровня
Синтаксис: AuthFormAuthoritative On|Off
По умолчанию: AuthFormAuthoritative On
Контекст:каталог, .htaccess
Переопределить:Аутконфиг
Положение дел:База
Модуль:mod_auth_form

Обычно каждый модуль авторизации, указанный в списке, AuthFormProvider пытается проверить пользователя, и если пользователь не найден ни у одного провайдера, доступ будет запрещен. Явная установка AuthFormAuthoritative директивы на Off разрешает передачу как аутентификации, так и авторизации другим модулям, не основанным на провайдере, если нет идентификатора пользователя или правила , соответствующего предоставленному идентификатору пользователя. Это должно быть необходимо только при объединении mod_auth_form со сторонними модулями, которые не настроены с помощью AuthFormProvider директивы. При использовании таких модулей порядок обработки определяется в исходном коде модулей и не настраивается.



Директива AuthFormBody

Описание:Имя поля формы, содержащего тело запроса на попытку успешного входа в систему.
Синтаксис: AuthFormBody fieldname
По умолчанию: httpd_body
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormMethod указывает имя поля HTML, которое, если оно присутствует, будет содержать метод запроса на отправку в случае успешного входа в систему.

Заполняя форму полями, описанными AuthFormMethod , AuthFormMimetype и AuthFormBody , веб-сайт может повторить запрос, который мог быть прерван экраном входа в систему или тайм-аутом сеанса.



Директива AuthFormDisableNoStore

Описание:Отключите заголовок отсутствия хранилища CacheControl на странице входа.
Синтаксис: AuthFormDisableNoStore On|Off
По умолчанию: AuthFormDisableNoStore Off
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Флаг AuthFormDisableNoStore отключает отправку заголовка Cache-Control no-store со страницей ошибки 401, возвращаемой, когда пользователь еще не вошел в систему. Цель заголовка — затруднить попытку приложения ecmascript повторно отправить форму входа и раскрыть имя пользователя и пароль. к серверному приложению. Отключайте на свой страх и риск.



Директива AuthFormFakeBasicAuth

Описание:Подделка заголовка Basic Authentication
Синтаксис: AuthFormFakeBasicAuth On|Off
По умолчанию: AuthFormFakeBasicAuth Off
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Флаг AuthFormFakeBasicAuth определяет, Basic Authentication будет ли добавлен заголовок к заголовкам запроса. Это можно использовать для предоставления имени пользователя и пароля базовому приложению, при этом базовое приложение не должно знать, как был выполнен вход в систему.



Директива AuthFormLocation

Описание:Имя поля формы, содержащего URL-адрес для перенаправления при успешном входе в систему.
Синтаксис: AuthFormLocation fieldname
По умолчанию: httpd_location
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormLocation указывает имя поля HTML, которое, если оно присутствует, будет содержать URL-адрес для перенаправления браузера в случае успешного входа в систему.



Директива AuthFormLoginRequiredLocation

Описание:URL-адрес страницы, на которую будет перенаправлено, если потребуется вход в систему
Синтаксис: AuthFormLoginRequiredLocation url
По умолчанию: none
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях. Использование синтаксического анализатора выражений было добавлено в версии 2.4.4.

Директива AuthFormLoginRequiredLocation указывает URL-адрес для перенаправления, если пользователь не авторизован для просмотра страницы. Значение анализируется с помощью синтаксического анализатора ap_expr перед отправкой клиенту. По умолчанию, если пользователь не авторизован для просмотра страницы, код ответа HTTP HTTP_UNAUTHORIZED будет возвращен со страницей, указанной в ErrorDocument директиве. Эта директива переопределяет это значение по умолчанию.

Используйте эту директиву, если у вас есть специальная страница входа для перенаправления пользователей.



Директива AuthFormLoginSuccessLocation

Описание:URL-адрес страницы, на которую будет перенаправлено в случае успешного входа в систему
Синтаксис: AuthFormLoginSuccessLocation url
По умолчанию: none
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях. Использование синтаксического анализатора выражений было добавлено в версии 2.4.4.

Директива AuthFormLoginSuccessLocation указывает URL-адрес для перенаправления, если пользователь успешно вошел в систему. Значение анализируется с помощью синтаксического анализатора ap_expr перед отправкой клиенту. Эту директиву можно переопределить, если с помощью директивы было определено поле формы, содержащее другой URL-адрес AuthFormLocation .

Используйте эту директиву, если у вас есть выделенный URL-адрес для входа и вы не встроили целевую страницу в форму входа.



Директива AuthFormLogoutLocation

Описание:URL-адрес для перенаправления после выхода пользователя из системы
Синтаксис: AuthFormLogoutLocation uri
По умолчанию: none
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях. Использование синтаксического анализатора выражений было добавлено в версии 2.4.4.

Директива AuthFormLogoutLocation указывает URL-адрес страницы на сервере для перенаправления, если пользователь попытается выйти из системы. Значение анализируется с помощью синтаксического анализатора ap_expr перед отправкой клиенту.

При доступе к URI, который обслуживается обработчиком form-logout-handler , страница, указанная в этой директиве, будет показана конечному пользователю. Например:

Пример

 <Расположение "/выход">
 SetHandler форма-выход-обработчик
 AuthFormLogoutLocation "http://example.com/loggedout.html"
 Сессия на
 #...
</местоположение> 

Попытка получить доступ к URI /logout/ приведет к выходу пользователя из системы и отображению страницы /loggedout.html . Убедитесь, что страница loggedout.html не защищена паролем, иначе страница не будет отображаться.



Директива AuthFormMethod

Описание:Имя поля формы, содержащего метод запроса на попытку успешного входа в систему.
Синтаксис: AuthFormMethod fieldname
По умолчанию: httpd_method
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormMethod указывает имя поля HTML, которое, если оно присутствует, будет содержать метод запроса на отправку в случае успешного входа в систему.

Заполняя форму полями, описанными AuthFormMethod , AuthFormMimetype и AuthFormBody , веб-сайт может повторить запрос, который мог быть прерван экраном входа в систему или тайм-аутом сеанса.



Директива AuthFormMimetype

Описание:Имя поля формы, содержащего mimetype тела запроса для попытки успешного входа в систему.
Синтаксис: AuthFormMimetype fieldname
По умолчанию: httpd_mimetype
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormMethod указывает имя поля HTML, которое, если оно присутствует, будет содержать MIME-тип запроса на отправку в случае успешного входа в систему.

Заполняя форму полями, описанными AuthFormMethod , AuthFormMimetype и AuthFormBody , веб-сайт может повторить запрос, который мог быть прерван экраном входа в систему или тайм-аутом сеанса.



Директива AuthFormPassword

Описание:Имя поля формы, содержащего логин-пароль
Синтаксис: AuthFormPassword fieldname
По умолчанию: httpd_password
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormPassword указывает имя поля HTML, которое, если оно присутствует, будет содержать пароль, который будет использоваться для входа в систему.



Директива AuthFormProvider

Описание:Устанавливает поставщика(ов) аутентификации для этого местоположения
Синтаксис: AuthFormProvider provider-name [provider-name] ...
По умолчанию: AuthFormProvider file
Контекст:каталог, .htaccess
Переопределить:Аутконфиг
Положение дел:База
Модуль:mod_auth_form

Директива AuthFormProvider устанавливает, какой провайдер используется для аутентификации пользователей для этого местоположения. Поставщик по умолчанию file реализуется модулем mod_authn_file . Убедитесь, что выбранный модуль провайдера присутствует на сервере.

Пример

 <Расположение "/secure">
 Форма AuthType
 AuthName "частная область"
 AuthFormProvider БД
 AuthDBMType SDBM
 AuthDBMUserFile "/www/etc/dbmpasswd"
 Требовать действительного пользователя
 #...
</местоположение> 

Провайдеры реализованы mod_authn_dbm , mod_authn_file , и . mod_authn_dbd mod_authnz_ldap mod_authn_socache



Директива AuthFormSitePassphrase

Описание:Обход проверки подлинности для сайтов с высоким трафиком
Синтаксис: AuthFormSitePassphrase secret
По умолчанию: none
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormSitePassphrase указывает парольную фразу, которая, если присутствует в сеансе пользователя, заставляет Apache httpd обходить проверки аутентификации для данного URL-адреса. Его можно использовать на веб-сайтах с высоким трафиком, чтобы снизить нагрузку на инфраструктуру аутентификации.

Парольную фразу можно вставить в пользовательский сеанс, добавив эту директиву в конфигурацию для form-login-handler . Сам обработчик формы -логина всегда будет запускать проверки подлинности, независимо от того, указана парольная фраза или нет.

Предупреждение

Если сеанс открыт для пользователя с помощью mod_session_cookie , а сеанс не защищен с помощью mod_session_crypto , парольная фраза открыта для потенциального раскрытия посредством атаки по словарю. Независимо от того, как настроен сеанс, убедитесь, что эта директива не используется в пространствах URL-адресов, где могут быть раскрыты личные данные пользователя или могут проводиться конфиденциальные транзакции. Используйте на свой страх и риск.



Директива AuthFormSize

Описание:Наибольший размер формы в байтах, который будет проанализирован для получения данных для входа.
Синтаксис: AuthFormSize size
По умолчанию: 8192
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormSize указывает максимальный размер тела запроса, который будет проанализирован для поиска формы входа.

Если поступает запрос на вход, превышающий этот размер, весь запрос будет прерван с кодом ответа HTTP HTTP_REQUEST_TOO_LARGE .

Если вы заполнили форму полями, описанными AuthFormMethod , AuthFormMimetype и AuthFormBody , вы, вероятно, захотите установить для этого поля тот же размер, что и KeptBodySize директива.



Директива AuthFormUsername

Описание:Имя поля формы, содержащего имя пользователя для входа
Синтаксис: AuthFormUsername fieldname
По умолчанию: httpd_username
Контекст:каталог
Положение дел:База
Модуль:mod_auth_form
Совместимость:Доступно в Apache HTTP Server 2.3.0 и более поздних версиях.

Директива AuthFormUsername указывает имя поля HTML, которое, если оно присутствует, будет содержать имя пользователя, которое будет использоваться для входа в систему.



 <         > 

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101      102      103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru