Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_session_dbd

Описание: Поддержка сеансов на основе DBD/SQL
Статус: Расширение
Идентификатор модуля: session_dbd_module
Исходный файл: mod_session_dbd.c
Совместимость: Доступен в Apache 2.3 и более поздних версиях

Краткое описание

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

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

Этот подмодуль mod_session обеспечивает поддержку хранения пользовательских сеансов в базе данных SQL с использованием модуля mod_dbd.

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

Сеансы на основе SQL скрыты от браузера и поэтому обеспечивают определённую конфиденциальность без необходимости шифрования.

Разные веб-серверы в серверном кластере могут использовать общую базу данных и, таким образом, совместно использовать сеансы.

Дополнительные сведения об интерфейсе сеансов см. в документации модуля mod_session.

Настройка DBD

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

Для поддержки сеанса требуются четыре запроса: для выбора существующего сеанса, обновления существующего сеанса, добавления нового сеанса и удаления просроченного или пустого сеанса. Эти запросы настраиваются, как показано в примере ниже.

Пример настройки DBD

DBDriver pgsql
DBDParams "dbname=apachesession user=apache password=xxxxx host=localhost"
DBDPrepareSQL "delete from session where key = %s" deletesession
DBDPrepareSQL "update session set value = %s, expiry = %lld, key = %s where key = %s" updatesession
DBDPrepareSQL "insert into session (value, expiry, key) values (%s, %lld, %s)" insertsession
DBDPrepareSQL "select value from session where key = %s and (expiry = 0 or expiry > %lld)" selectsession
DBDPrepareSQL "delete from session where expiry != 0 and expiry < %lld" cleansession

Анонимные сеансы

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

Чтобы создать простой анонимный сеанс, сохранить его в таблице базы данных postgres с именем apachesession и сохранить идентификатор сеанса в куки с именем session, настройте сеанс следующим образом:

Анонимный сеанс на основе SQL

Session On
SessionDBDCookieName session path=/

Другие примеры настройки сеанса для чтения и записи данных CGI-приложением см. в разделе примеров модуля mod_session.

Документацию о том, как использовать сеанс для хранения имени пользователя и пароля, см. в модуле mod_auth_form.

Пользовательские сеансы

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

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

Чтобы создать простой пользовательский сеанс, сохранить его в таблице базы данных postgres с именем apachesession и использовать идентификатор пользователя в качестве ключа сеанса, настройте сеанс следующим образом:

Пользовательский сеанс на основе SQL

Session On
SessionDBDPerUser On

Обслуживание базы данных

Со временем в базе данных могут накапливаться просроченные сеансы. На данный момент модуль mod_session_dbd ещё не умеет автоматически обрабатывать истечение срока действия сеансов.

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

Администратору потребуется настроить внешний процесс очистки просроченных сеансов с помощью cron.

Директива SessionDBDCookieName

Описание: Имя и атрибуты куки RFC2109, в которой хранится идентификатор сеанса
Синтаксис:
SessionDBDCookieName name attributes
По умолчанию: none
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Директива SessionDBDCookieName задаёт имя и необязательные атрибуты куки, соответствующей RFC2109, в которой будет храниться идентификатор сеанса. Куки RFC2109 задаются с помощью HTTP-заголовка Set-Cookie.

Можно указать необязательный список атрибутов куки, как показано в примере ниже. Эти атрибуты без изменений добавляются в куки и не интерпретируются Apache. Убедитесь, что атрибуты заданы правильно в соответствии со спецификацией куки.

Куки с атрибутами

Session On
SessionDBDCookieName session path=/private;domain=example.com;httponly;secure;version=1;

Директива SessionDBDCookieName2

Описание: Имя и атрибуты куки RFC2965, в которой хранится идентификатор сеанса
Синтаксис:
SessionDBDCookieName2 name attributes
По умолчанию: none
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Директива SessionDBDCookieName2 задаёт имя и необязательные атрибуты куки, соответствующей RFC2965, в которой будет храниться идентификатор сеанса. Куки RFC2965 задаются с помощью HTTP-заголовка Set-Cookie2.

Можно указать необязательный список атрибутов куки, как показано в примере ниже. Эти атрибуты без изменений добавляются в куки и не интерпретируются Apache. Убедитесь, что атрибуты заданы правильно в соответствии со спецификацией куки.

Cookie2 с атрибутами

Session On
SessionDBDCookieName2 session path=/private;domain=example.com;httponly;secure;version=1;

Директива SessionDBDCookieRemove

Описание: Управление удалением куки с идентификатором сеанса из входящих HTTP-заголовков
Синтаксис:
SessionDBDCookieRemove On|Off
По умолчанию:
SessionDBDCookieRemove On
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Флаг SessionDBDCookieRemove определяет, будут ли куки с идентификатором сеанса удаляться из заголовков при обработке запроса.

В конфигурации с обратным прокси-сервером, когда сервер Apache выступает в роли внешнего сервера для исходного сервера, передача содержимого куки с идентификатором сеанса внутреннему серверу может нарушить конфиденциальность. Если параметр включён, куки с идентификатором сеанса будут удаляться из входящих HTTP-заголовков.

Директива SessionDBDDeleteLabel

Описание: SQL-запрос для удаления сеансов из базы данных
Синтаксис:
SessionDBDDeleteLabel label
По умолчанию:
SessionDBDDeleteLabel deletesession
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Директива SessionDBDDeleteLabel задаёт метку запроса удаления по умолчанию, используемого для удаления просроченного или пустого сеанса. Эта метка должна быть предварительно определена с помощью директивы DBDPrepareSQL.

Директива SessionDBDInsertLabel

Описание: SQL-запрос для добавления сеансов в базу данных
Синтаксис:
SessionDBDInsertLabel label
По умолчанию:
SessionDBDInsertLabel insertsession
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Директива SessionDBDInsertLabel задаёт метку запроса добавления по умолчанию, используемого для загрузки сеанса. Эта метка должна быть предварительно определена с помощью директивы DBDPrepareSQL.

Если попытка обновить сеанс не затрагивает ни одной строки, этот запрос будет вызван для добавления сеанса в базу данных.

Директива SessionDBDPerUser

Описание: Включение пользовательского сеанса
Синтаксис:
SessionDBDPerUser On|Off
По умолчанию:
SessionDBDPerUser Off
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Флаг SessionDBDPerUser включает пользовательский сеанс, ключом которого служит имя пользователя для входа в систему. Если пользователь не вошёл в систему, эта директива игнорируется.

Директива SessionDBDSelectLabel

Описание: SQL-запрос для выбора сеансов из базы данных
Синтаксис:
SessionDBDSelectLabel label
По умолчанию:
SessionDBDSelectLabel selectsession
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Директива SessionDBDSelectLabel задаёт метку запроса выборки по умолчанию, используемого для загрузки сеанса. Эта метка должна быть предварительно определена с помощью директивы DBDPrepareSQL.

Директива SessionDBDUpdateLabel

Описание: SQL-запрос для обновления существующих сеансов в базе данных
Синтаксис:
SessionDBDUpdateLabel label
По умолчанию:
SessionDBDUpdateLabel updatesession
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Расширение
Модуль: mod_session_dbd

Директива SessionDBDUpdateLabel задаёт метку запроса обновления по умолчанию, используемого для загрузки сеанса. Эта метка должна быть предварительно определена с помощью директивы DBDPrepareSQL.

Если попытка обновить сеанс не затрагивает ни одной строки, будет вызван запрос добавления, чтобы добавить сеанс в базу данных. Если база данных поддерживает InsertOrUpdate, переопределите этот запрос, чтобы выполнять обновление одним запросом вместо двух.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_session_dbd.html

Spec-Zone.ru

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