mod_session_dbd
Support des session basé sur DBD/SQL
Extension
mod_session_dbd.c
session_dbd_module
Disponible depuis la version 2.3 d'Apache
Avertissement
Les modules de session font usage des cookies HTTP, et peuvent
à ce titre être victimes d'attaques de type Cross Site Scripting,
ou divulguer des informations à caractère privé aux clients.
Veuillez vous assurer que les risques ainsi encourus ont été pris
en compte avant d'activer le support des sessions sur votre
serveur.
Ce sous-module du module mod_session fournit le
support du stockage des sessions utilisateur dans une base de
données SQL en utilisant le module mod_dbd.
Les sessions sont soit anonymes, et la session
est alors identifiée par un UUID unique stocké dans un cookie au
niveau du navigateur, soit propres à l'utilisateur,
et le session est alors identifiée par l'identifiant de
l'utilisateur connecté.
Les sessions basées sur SQL sont dissimulées au navigateur, et
permettent ainsi de préserver la confidentialité sans avoir recours
au chiffrement.
Plusieurs serveurs web d'une forêt de serveurs peuvent choisir de
partager une base de données, et ainsi partager les sessions entre
eux.
Pour plus de détails à propos de l'interface des sessions, voir
la documentation du module mod_session.
mod_session
mod_session_crypto
mod_session_cookie
mod_dbd
Configuration de DBD
Pour que le module mod_session_dbd puisse être
configuré pour maintenir une session, il faut tout d'abord
configurer le module mod_dbd pour que le serveur
puisse exécuter des requêtes vers la base de données.
Quatre types de requêtes sont nécessaires pour maintenir une
session, sélectionner ou mettre à jour une session existante,
insérer une nouvelle session et supprimer une session vide ou
arrivée à expiration. Ces requêtes sont configurées comme dans
l'exemple suivant :
Exemple de configuration de 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
Sessions anonymes
Les sessions anonymes sont identifiées par un UUID unique, et
stockées dans un cookie au niveau du navigateur. Cette méthode est
similaire à celle utilisée par la plupart des serveurs
d'applications pour stocker les informations de session.
Pour créer une session anonyme, la stocker dans une table de
base de donnée postgres nommée apachesession, et
sauvegarder l'identifiant de session dans un cookie nommé
session, configurez la session comme suit :
Session anonyme basée sur SQL
Session On
SessionDBDCookieName session path=/
Pour plus d'exemples sur la manière dont une application CGI
peut accéder aux informations de session, voir la section exemples
de la documentation du module mod_session.
Pour des détails sur la manière dont une session peut être
utilisée pour stocker des informations de type nom
d'utilisateur/mot de passe, voir la documentation du module
mod_auth_form.
Sessions propres à un
utilisateur
Les sessions propres à un utilisateur sont identifiées par le
nom de l'utilisateur authentifié avec succès. Ceci permet
d'assurer une confidentialité optimale, car aucun traitement
externe à la session n'existe en dehors du contexte
authentifié.
Les sessions propres à un utilisateur ne fonctionnent que dans
un environnement d'authentification correctement configuré, qu'il
s'agisse d'une authentification de base, à base de condensés
(digest) ou de certificats client SSL. Suite à des limitations
dues à des dépendances mutuelles, les sessions propres à un
utilisateur ne peuvent pas être utilisées pour stocker les données
d'authentification en provenance d'un module comme
mod_auth_form.
Pour créer une session propre à un utilisateur, la stocker dans
une table de base de données postgres nommée
apachesession, avec comme clé de session l'identifiant
utilisateur, ajoutez les lignes suivantes :
Session propre à un utilisateur basée sur SQL
Session On
SessionDBDPerUser On
Nettoyage de la base de
données
Avec le temps, la base de données va commencer à accumuler des
sessions expirées. Pour le moment, le module
mod_session_dbd n'est pas en mesure de gérer
automatiquement l'expiration des sessions.
Avertissement
L'administrateur devra mettre en oeuvre un traitement externe
via cron pour nettoyer les sessions expirées.
SessionDBDCookieName
Nom et attributs du cookie RFC2109 qui contient
l'identifiant de session
SessionDBDCookieName nom attributs
none
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDCookieName permet
de spécifier le nom et les attributs optionnels d'un cookie
compatible RFC2109 qui contiendra l'identifiant de session. Les
cookies RFC2109 sont définis à l'aide de l'en-tête HTTP
Set-Cookie
.
Une liste optionnelle d'attributs peut être spécifiée pour ce
cookie, comme dans l'exemple ci-dessous. Ces attributs sont insérés
dans le cookie tel quel, et ne sont pas interprétés par Apache.
Assurez-vous que vos attributs sont définis correctement selon la
spécification des cookies.
Cookie avec attributs
Session On
SessionDBDCookieName session path=/private;domain=example.com;httponly;secure;version=1;
SessionDBDCookieName2
Nom et attributs du cookie RFC2965 qui contient
l'identifiant de session
SessionDBDCookieName2 nom attributs
none
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDCookieName2 permet
de spécifier le nom et les attributs optionnels d'un cookie
compatible RFC2965 qui contiendra l'identifiant de session. Les
cookies RFC2965 sont définis à l'aide de l'en-tête HTTP
Set-Cookie2
.
Une liste optionnelle d'attributs peut être spécifiée pour ce
cookie, comme dans l'exemple ci-dessous. Ces attributs sont insérés
dans le cookie tel quel, et ne sont pas interprétés par Apache.
Assurez-vous que vos attributs sont définis correctement selon la
spécification des cookies.
Cookie2 avec attributs
Session On
SessionDBDCookieName2 session path=/private;domain=example.com;httponly;secure;version=1;
SessionDBDCookieRemove
Détermine si les cookies de session doivent être supprimés
des en-têtes HTTP entrants
SessionDBDCookieRemove On|Off
SessionDBDCookieRemove On
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDCookieRemove permet
de déterminer si les cookies contenant l'identifiant de session
doivent être supprimés des en-têtes pendant le traitement de la
requête.
Dans le cas d'un mandataire inverse où le serveur Apache sert de
frontal à un serveur d'arrière-plan, révéler le contenu du cookie de
session à ce dernier peut conduire à une violation de la
confidentialité. A ce titre, si cette directive est définie à "on",
le cookie de session sera supprimé des en-têtes HTTP entrants.
SessionDBDPerUser
Active une session propre à un utilisateur
SessionDBDPerUser On|Off
SessionDBDPerUser Off
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDPerUser permet
d'activer une session propre à un utilisateur, dont la clé sera le
nom de l'utilisateur connecté. Si l'utilisateur n'est pas connecté,
la directive sera ignorée.
SessionDBDSelectLabel
La requête SQL à utiliser pour sélectionner des sessions
dans la base de données
SessionDBDSelectLabel étiquette
SessionDBDSelectLabel selectsession
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDSelectLabel permet
de définir l'étiquette de la requête de sélection par défaut à
utiliser pour charger une session. Cette étiquette doit avoir été
définie au préalable via une directive DBDPrepareSQL.
SessionDBDInsertLabel
La requête SQL à utiliser pour insérer des sessions dans la
base de données
SessionDBDInsertLabel étiquette
SessionDBDInsertLabel insertsession
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDInsertLabel permet
de définir l'étiquette de la requête d'insertion par défaut à
charger dans une session. Cette
étiquette doit avoir été définie au préalable via une directive
DBDPrepareSQL.
Si une tentative de mise à jour d'une session ne concerne aucun
enregistrement, c'est cette requête qui sera utilisée pour insérer
la session dans la base de données.
SessionDBDUpdateLabel
La requête SQL à utiliser pour mettre à jour des sessions
préexistantes dans la base de données
SessionDBDUpdateLabel étiquette
SessionDBDUpdateLabel updatesession
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDUpdateLabel permet
de définir l'étiquette de la requête de mise à jour par défaut à
charger dans une session. Cette
étiquette doit avoir été définie au préalable via une directive
DBDPrepareSQL.
Si une tentative de mise à jour d'une session ne concerne aucun
enregistrement, c'est la requête d'insertion qui sera appelée pour
insérer la session dans la base de données. Si la base de données
supporte InsertOrUpdate, modifiez cette requête pour effectuer la
mise à jour en une seule requête au lieu de deux.
SessionDBDDeleteLabel
La requête SQL à utiliser pour supprimer des sessions de la
base de données
SessionDBDDeleteLabel étiquette
SessionDBDDeleteLabel deletesession
server config
virtual host
directory
.htaccess
AuthConfig
La directive SessionDBDDeleteLabel permet
de définir l'étiquette de la requête de suppression à utiliser par
défaut pour supprimer une session vide ou expirée. Cette
étiquette doit avoir été définie au préalable via une directive
DBDPrepareSQL.