Модуль 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