Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_session_dbd

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

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

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

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

Этот подмодуль 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.

Сессии, привязанные к пользователю

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

Сессии, привязанные к пользователю, работают в правильно настроенной аутентифицированной среде, будь то с помощью базовой аутентификации, аутентификации по Digest или 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. Убедитесь, что ваши атрибуты определены правильно в соответствии со спецификацией куки.

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

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