Sécurisation des configurations INI de session

En sécurisant les configurations INI de sessions, les développeurs peuvent éprouver la sécurité des sessions. Beaucoup de configurations INI n'ont pas de configuration recommandée. Les développeurs sont responsables de la bonne configuration des sessions.

  • session.cookie_lifetime=0

    La valeur 0 a une signification importante. Elle informe les navigateurs de ne pas stocker le cookie dans un espace de stockage permanent. Aussi, lorsque le navigateur se ferme, le cookie d'identification de session est supprimé immédiatement. Si les développeurs définissent une valeur différente de 0, cela permet aux autres utilisateurs d'utiliser l'identifiant de session. La plupart des applications devraient utiliser "0" comme valeur.

    Si une fonctionnalité d'auto-identification est désirée, les développeurs doivent implémenter leur propre systÚme d'auto-identification sécurisé. Ne pas utiliser d'identifiants de session à longue durée pour cela. Pour plus d'informations, se rapporter à la bonne section de cette documentation.

  • session.use_cookies=On

    session.use_only_cookies=On

    Bien que les cookies HTTP souffrent de soucis techniques, ils restent la façon préférée de gérer les identifiants de sessions. N'utiliser que les cookies pour la gestion des identifiants de sessions lorsque cela est possible. La plupart des applications doivent utiliser un cookie pour l'identifiant de session.

    Si session.use_only_cookies=Off, le module de session utilisera les valeurs de l'identifiant de sessions définies par les variables GET ou POST fournies, et le cookie de l'identifiant de session ne sera pas initialisé.

  • session.use_strict_mode=On

    Bien que l'activation de session.use_strict_mode soit obligatoire pour la sécurité des sessions, cette directive est désactivée par défaut.

    Ce mode évite que le module de session utilise un identifiant de session non initialisé. Dit différemment, le module de session ne va accepter que les identifiants de sessions valides générés par le module de session. Il va rejeter tous les identifiants de session fournis par les utilisateurs.

    En raison de la spécification des cookies, les attaquants sont capables de placer des cookies contenant les identifiants de sessions en configurant localement une base de données de cookie ou par injections Javascript. session.use_strict_mode peut éviter qu'un attaquant n'initialise un identifiant de session.

    Note:

    Les attaquants peuvent initialiser un identifiant de session avec leur propre périphérique, et peuvent définir l'identifiant de session de leur victime. Ils doivent alors conserver l'identifiant de session actif pour pouvoir en abuser. Les attaquants doivent passer par bien d'autres étapes pour réussir leur attaque dans ce scénario. Aussi, l'utilisation de la directive session.use_strict_mode permet de limiter les risques.

  • session.cookie_httponly=On

    Permet de refuser l'accÚs à un cookie de session depuis javascript. Cette configuration évite qu'un cookie ne soit corrompu par une injection Javascript.

    Il est possible d'utiliser un identifiant de session comme jeton CSRF, mais ce n'est pas recommandĂ©. Par exemple, des sources HTML peuvent ĂȘtre sauvegardĂ©es et envoyĂ©es Ă  d'autres utilisateurs. Les dĂ©veloppeurs ne doivent pas Ă©crire les identifiants de session dans les pages web pour des raisons de sĂ©curitĂ©. Toutes les applications web doivent utiliser l'attribut httponly pour le cookie contenant l'identifiant de session.

    Note:

    Le jeton CSRF doit ĂȘtre renouvelĂ© pĂ©riodiquement, tout comme l'identifiant de session.

  • session.cookie_secure=On

    Permet d'accĂ©der au cookie d'identifiant de session uniquement lorsque le protocole est HTTPS. Si un site web n'est accessible que par HTTPS, cette directive doit ĂȘtre activĂ©e.

    HSTS doit ĂȘtre utilisĂ© pour les sites web accessibles que par HTTPS.

  • session.cookie_samesite="Lax" ou session.cookie_samesite="Strict"

    À partir de PHP 7.3, l'attribut "SameSite" peut ĂȘtre dĂ©fini pour le cookie d'identifiant de session. Cet attribut est une façon de mitiger les attaques CSRF (Cross Site Request Forgery).

    La diffĂ©rence entre Lax et Strict est l'accessibilitĂ© du cookie dans les requĂȘtes originaires d'autres domaines employant la mĂ©thode HTTP GET. Les cookies utilisant Lax seront accessibles via une requĂȘte GET originaire d'un autre domaine, alors que les cookies utilisant Strict ne le seront pas.

  • session.gc_maxlifetime=[choisissez le plus petit possible]

    session.gc_maxlifetime est une configuration pour supprimer l'identifiant de session obsolĂšte. Le fait de se reposer entiĂšrement sur cette configuration n'est pas recommandĂ©. Les dĂ©veloppeurs doivent gĂ©rer la durĂ©e de vie des sessions avec un timestamp par eux-mĂȘmes.

    Le GC des sessions (garbage collection) est mieux rĂ©alisĂ© en utilisant la fonction session_gc(). La fonction session_gc() doit ĂȘtre exĂ©cutĂ©e par un gestionnaire de tĂąches ; c.-Ă -d. un cron sur les systĂšmes Unix.

    GC est exĂ©cutĂ© par probabilitĂ©, par dĂ©faut. Cette configuration ne garantit pas que les anciennes sessions soient supprimĂ©es. Bien que les dĂ©veloppeurs ne doivent pas s'appuyer sur ce paramĂštre, il est recommandĂ© tout de mĂȘme de le dĂ©finir Ă  une valeur la plus petite possible. Il convient d'ajuster les directives session.gc_probability et session.gc_divisor de sorte Ă  ce que les sessions obsolĂštes soient supprimĂ©es Ă  frĂ©quence appropriĂ©e. Si la fonctionnalitĂ© d'auto-identification est nĂ©cessaire, les dĂ©veloppeurs doivent implĂ©menter leur propre fonctionnalitĂ© d'auto-identification sĂ©curisĂ©e ; voir ci-dessous pour plus d'informations. N'utiliser jamais l'identifiant de session de longue durĂ©e pour rĂ©aliser ce genre de fonctionnalitĂ©.

    Note:

    Quelques modules de gestion de sauvegarde des sessions n'utilisent pas cette fonctionnalité basée sur l'expiration et sur la probabilité ; c.-à-d. memcached, memcache. Se référer à la documentation de ces gestionnaires de sauvegarde des sessions pour plus de détails.

  • session.use_trans_sid=Off

    L'utilisation d'un gestionnaire d'identifiants de sessions transparent n'est pas interdit. Les développeurs doivent l'employer lorsque nécessaire. Pourtant, la désactivation de la gestion des identifiants de session de façon transparente permet de sécuriser un peu plus les identifiants de session en éliminant la possibilité d'une injection d'identifiant de sessions ou de fuite de cet identifiant.

    Note:

    L'identifiant de session peut fuiter depuis des URLs sauvegardées, des URLs dans des emails, d'une source HTML sauvegardée, etc.

  • session.trans_sid_tags=[balises limitĂ©es]

    (PHP 7.1.0 >=) Les dĂ©veloppeurs ne devraient pas réécrire de balises HTML non nĂ©cessaires. La valeur par dĂ©faut doit ĂȘtre suffisante pour la plupart des utilisations. Pour les versions de PHP plus anciennes, utiliser plutĂŽt url_rewriter.tags.

  • session.trans_sid_hosts=[hĂŽtes limitĂ©s]

    (PHP 7.1.0 >=) Ce paramÚtre définit une liste blanche des hÎtes qui sont autorisés à réécrire les identifiants de session transparents. Ne jamais ajouter d'hÎte qui ne sont pas de confiance ! Le module de session autorise uniquement $_SERVER['HTTP_HOST'] lorsque ce paramÚtre est vide.

  • session.referer_check=[URL d'origine]

    Lorsque le paramĂštre session.use_trans_sid est actif. Ce paramĂštre rĂ©duit les risques d'injection d'identifiant de session. Si un site web est http://example.com/, dĂ©finissez comme valeur Ă  ce paramĂštre http://example.com/. Il est Ă  noter que les navigateurs HTTPS n'envoient pas l'en-tĂȘte referrer. Les navigateurs peuvent ne pas envoyer l'en-tĂȘte referrer de part leur propre configuration. Aussi, ce paramĂštre ne peut pas ĂȘtre considĂ©rĂ© comme une mesure fiable de sĂ©curitĂ©. MalgrĂ© tout, son utilisation est recommandĂ©e.

  • session.cache_limiter=nocache

    S'assure que le contenu HTTP n'est pas mis en cache pour les sessions authentifiĂ©es. Permet la mise en cache que pour les contenus qui ne sont pas privĂ©s. Sinon, le contenu sera exposĂ©. La valeur "private" doit ĂȘtre employĂ©e si le contenu HTTP n'inclut pas des donnĂ©es sensibles d'un point de vue sĂ©curitĂ©. Il est Ă  noter que "private" peut transmettre des donnĂ©es privĂ©es mises en cache pour les clients partagĂ©s. "public" doit ĂȘtre uniquement utilisĂ© lorsque le contenu HTML ne contient aucune donnĂ©e privĂ©e.

  • session.hash_function="sha256"

    (PHP 7.1.0 <) Une fonction de hachage forte va générer un identifiant de session fort. Bien qu'une collision de hachage soit peu probable avec des algorithmes de hachage MD5, les développeurs doivent utiliser SHA-2 ou un algorithme de hachage plus fort comme sha384 et sha512. Les développeurs doivent s'assurer d'une longueur suffisante de l'entropie pour la fonction de hachage utilisée.

  • session.save_path=[dossier non lisible par tout le monde]

    Si ce paramÚtre est défini à un dossier accessible en lecture par tout le monde, comme /tmp (par défaut), les autres utilisateurs du serveur seront capables de récupérer les sessions en listant les fichiers présents dans ce répertoire.

add a note

User Contributed Notes 1 note

up
8
theking2(at)king.ma ¶
2 years ago
It is important to realize that session.cookie_lifetime=0 will delete the cookie when the browser closes but nowadays browers tend to never close even after the last windows or tab was closed. 

For startup speed purposes and to retrieve push traffic browser drop to the background hence the cookie stays put.