<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/session.security.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'features.session.security.management.php',
    1 => 'Gestion basique des sessions',
    2 => 'Gestion basique des sessions',
  ),
  'up' => 
  array (
    0 => 'session.security.php',
    1 => 'Sessions et S&eacute;curit&eacute;',
  ),
  'prev' => 
  array (
    0 => 'session.security.php',
    1 => 'Sessions et S&eacute;curit&eacute;',
  ),
  'next' => 
  array (
    0 => 'session.security.ini.php',
    1 => 'S&eacute;curisation des configurations INI de session',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/session/security.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.session.security.management" class="sect1">
  <h2 class="title">Gestion basique des sessions</h2>
  
  <div class="sect2" id="features.session.security.management.basic">
   <h3 class="title">Sécurité des sessions</h3>
   <p class="para">
    Le module de session ne peut pas garantir que les informations stockées
    dans une session ne sont vues uniquement par l&#039;utilisateur qui 
    a créé la session. Des mesures supplémentaires sont nécessaires pour
    protéger la confidentialité de la session, suivant la valeur
    qu&#039;on lui associe.
   </p>
   
   <p class="para">
    L&#039;importance des données stockées dans une session doit être évaluée
    et des protections supplémentaires peuvent être déployées ;
    ceci a obligatoirement un coût tel qu&#039;être moins pratique pour
    l&#039;utilisateur. Par exemple, pour protéger les utilisateurs
    d&#039;une tactique simple, la directive <a href="session.configuration.php#ini.session.use-only-cookies" class="link">session.use_only_cookies</a>
    doit être activée. Dans ce cas, les cookies doivent être
    activés obligatoirement côté client sinon les sessions ne
    fonctionneront pas.
   </p>
   
   <p class="para">
    Il y a plusieurs façons de divulguer des identifiants de session à
    des tierces personnes. I.E. injections Javascripts, identifiants
    de session dans les URLs, reniflement de paquets, accès physique
    au périphérique, etc.
    Un identifiant de session divulgué permet à un tiers d&#039;accéder
    à toutes les ressources associées avec cet identifiant. Tout d&#039;abord,
    les URLs contenant les identifiants de session. S&#039;il y a des liens
    vers des sites ou des ressources externes, l&#039;URL incluant l&#039;identifiant
    de session doit être stockée dans les logs referrer du site externe.
    Si ces données ne sont pas chiffrées, les identifiants de session
    vont être transmis en texte clair sur le réseau. La solution ici est
    d&#039;implémenter SSL/TLS sur le serveur et le rendre mandataire pour les
    utilisateurs. HSTS devrait être utilisé pour améliorer également la
    sécurité.
   </p>
    
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <span class="simpara">
      Même HTTPS ne peut protéger la confidentialité des données
      dans tous les cas. Par exemple, les vulnérabilités CRIME et BEAST
      permettent à un attaquant de lire les données. De plus, il est à noter
      que certains réseaux utilisent des proxys HTTPS MITM pour
      des audits. Les attaquants peuvent également mettre en place
      ce genre de proxy.
     </span>
    </p></blockquote>
    
   </div>
   
   <div class="sect2" id="features.session.security.management.non-adaptive-session">
    <h3 class="title">Gestion des sessions non adaptatives</h3>
    
    <p class="para">
     Le gestionnaire de sessions PHP est adaptatif, par défaut.
     Un gestionnaire de sessions adaptatif apporte des
     risques supplémentaires.
    </p>
    
    <p class="para">
     Lorsque <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
     est activé, et que le gestionnaire de sauvegarde des sessions le supporte,
     un identifiant de session non initialisé est rejeté, et un nouveau est créé.
     Ceci prévient une attaque qui force les utilisateurs à utiliser un
     identifiant de session connu.
     Un attaquant peut passer des liens ou envoyer des emails qui contiennent
     l&#039;identifiant de session.
     I.e. <code class="literal">http://example.com/page.php?PHPSESSID=123456789</code> si
     <a href="session.configuration.php#ini.session.use-trans-sid" class="link">session.use_trans_sid</a> est activé,
     la victime commencera une session en utilisant l&#039;identifiant de session
     fourni par l&#039;attaquant.
     <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
     permet d&#039;annuler ce type de risque.
    </p>
    
    <div class="warning"><strong class="warning">Avertissement</strong>
     <p class="simpara">
      Les gestionnaires de sauvegarde définis par l&#039;utilisateur peuvent
      aussi supporter le mode de session strict en implémentant
      la validation des identifiants de session. Tous les gestionnaires de
      sauvegarde définis par l&#039;utilisateur devraient implémenter la validation
      des identifiants de session.
     </p>
    </div>
    
    <p class="para">
     Le cookie d&#039;identifiant de session peut être défini avec les
     attributs domain, path, httponly, secure et, à partir de PHP 7.3, SameSite.
     Il existe une priorité définie par les navigateurs.
     En utilisant les priorités, un attaquant peut définir l&#039;identifiant de
     session qui peut être utilisé en permanence. L&#039;utilisation de la
     directive <a href="session.configuration.php#ini.session.use-only-cookies" class="link">session.use_only_cookies</a>
     ne permet pas de résoudre ce problème.
     <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
     permet de mitiger ce risque. Avec la directive
     <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>=On,
     l&#039;identifiant de session non initialisé sera refusé.
    </p>
    
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <span class="simpara">
      Même si la directive
      <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
      limite les risques concernant le gestionnaire adaptatif de session, un
      attaquant peut forcer les utilisateurs à utiliser un identifiant de
      session non initialisé qui a été créé par l&#039;attaquant, c.-à-d. via des injections
      Javascript. Ce type d&#039;attaque peut être limité en utilisant les
      recommandations de ce manuel.
     </span>
     
     <span class="simpara">
      En suivant ce manuel, les développeurs devraient activer la directive
      <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>,
      utiliser les timestamps basés sur le gestionnaire de session,
      et régénérer les identifiants de session en utilisant la fonction
      <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span> avec les procédures
      recommandées. Si les développeurs suivent ces instructions, un identifiant de session
      généré par un attaquant sera normalement supprimé.
     </span>
     
     <span class="simpara">
      Lorsqu&#039;un accès à une session obsolète survient, les développeurs
      devraient sauvegarder toutes les données de la session active de
      l&#039;utilisateur ; ces informations seront utiles pour de futures
      investigations. L&#039;utilisateur devrait être forcé à se déconnecter
      de toutes les sessions, c.-à-d. le forçant ainsi à s&#039;identifier de
      nouveau. Ceci permet de contrer les attaques utilisant des sessions
      volées.
     </span>
    </p></blockquote>
    
    <div class="warning"><strong class="warning">Avertissement</strong>
     <p class="simpara">
      L&#039;accès à une session obsolète ne veut pas forcément dire qu&#039;il s&#039;agit d&#039;une
      attaque. Un réseau instable et/ou l&#039;effacement immédiat de la session
      active va conduire des utilisateurs légitimes à utiliser des sessions
      obsolètes.
     </p>
    </div>
    
    <p class="para">
     À partir de PHP 7.1.0, la fonction <span class="function"><a href="function.session-create-id.php" class="function">session_create_id()</a></span> a été
     ajoutée. Cette fonction permet d&#039;accéder à toutes les sessions actives
     d&#039;un utilisateur en préfixant les identifiants de session avec l&#039;identifiant
     de l&#039;utilisateur. L&#039;activation de la directive
     <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
     est vital dans cette configuration. Sinon, les utilisateurs malicieux
     peuvent définir des identifiants de sessions pour les autres utilisateurs.
    </p>
    
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <span class="simpara">
      Les utilisateurs des versions antérieures à PHP 7.1.0 <em>doivent</em>
      utiliser <abbr title="Cryptographically Secure PseudoRandom Number Generator">CSPRNG</abbr>, c.-à-d. <var class="filename">/dev/urandom</var>, ou la fonction
      <span class="function"><a href="function.random-bytes.php" class="function">random_bytes()</a></span> et les fonctions de hachage
      pour générer un nouvel identifiant de session. La fonction
      <span class="function"><a href="function.session-create-id.php" class="function">session_create_id()</a></span> possède des mécanismes de détection
      de collision, et génère un identifiant de session suivant les
      configurations INI des sessions. L&#039;utilisation de la fonction
      <span class="function"><a href="function.session-create-id.php" class="function">session_create_id()</a></span> est recommandée.
     </span>
    </p></blockquote>
    
   </div>
   
   <div class="sect2" id="features.session.security.management.session-id-regeneration">
    <h3 class="title">Régénération d&#039;un identifiant de session</h3>
    
    <p class="para">
     La directive
     <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
     est un bon compromis mais n&#039;est pas suffisant. Les développeurs doivent
     également utiliser la fonction <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>
     pour la sécurité des sessions.
    </p>
    
    <p class="para">
     La régénération d&#039;un identifiant de session réduit le risque de vol d&#039;identifiants
     de session, aussi, la fonction <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>
     doit être utilisée périodiquement; c.-à-d. régénérer l&#039;identifiant de session toutes
     les 15 minutes pour sécuriser le contenu sensible. Même dans le cas où
     un identifiant de session est volé, à la fois le légitime utilisateur
     et l&#039;attaquant aura sa session qui va expirer. En d&#039;autres termes, l&#039;accès
     au contenu par l&#039;utilisateur ou l&#039;attaquant va générer une erreur d&#039;accès
     à une session obsolète.
    </p>
    
    <p class="para">
     Les identifiants de session <em>doivent</em> être régénérés lorsque
     les privilèges de l&#039;utilisateur sont élevés, comme après une authentification.
     La fonction <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span> doit être appelée
     avant le stockage des informations d&#039;authentification dans <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>. 
     (la fonction <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>
     sauvegarde les données de session courantes automatiquement afin de
     sauvegarder les timestamps/etc. dans la session courante.)
     Il faut s&#039;assurer que la nouvelle session contient le drapeau d&#039;authentification.
    </p>
    
    <p class="para">
     Les développeurs <em>ne doivent pas</em> se baser sur
     l&#039;expiration de l&#039;identifiant de session définie par la directive
     <a href="session.configuration.php#ini.session.gc-maxlifetime" class="link">session.gc_maxlifetime</a>.
     Les attaquants peuvent accéder à l&#039;identifiant de session de la victime
     de façon périodique pour éviter son expiration, et permettre son exploitation
     y compris avec des sessions authentifiées.
    </p>
    
    <p class="para">
     Au lieu de cela, les développeurs doivent implémenter un timestamp
     basé sur la gestion des données de session.
   </p>
   
   <div class="warning"><strong class="warning">Avertissement</strong>
    <p class="simpara">
     Même si le gestionnaire de session peut gérer les timestamps de façon
     transparente, cette fonctionnalité n&#039;est pas implémentée. Les données
     des anciennes sessions doivent être conservées tant que le récupérateur
     de mémoire ne soit passé. Simultanément, les développeurs doivent s&#039;assurer
     eux-mêmes que les données de session obsolètes soient effectivement effacées.
     Cependant, les développeurs ne doivent pas supprimer les données
     de session active trop rapidement. c.-à-d. <code class="code">session_regenerate_id(true);</code>
     et <span class="function"><a href="function.session-destroy.php" class="function">session_destroy()</a></span> ne doivent jamais être appelés
     en même temps pour une session active. Ça peut paraître contradictoire, 
     mais c&#039;est une exigence du mandataire.
    </p>
   </div>
   
   <p class="para">
    <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span> <em>n&#039;effacera pas</em>
    les anciennes sessions par défaut. Les sessions authentifiées obsolètes
    peuvent être présentées pour être utilisées. Les développeurs doivent s&#039;assurer
    que les anciennes sessions ne soient pas utilisées par tout le monde.
    Ils doivent interdire l&#039;accès aux données de session obsolète
    en utilisant eux-mêmes des timestamps.
   </p>
   
   <div class="warning"><strong class="warning">Avertissement</strong>
    <p class="simpara">
     La suppression soudaine d&#039;une session active produit des effets de bords
     indésirables. Les sessions peuvent disparaître lorsqu&#039;il y a des connexions
     concurrentes sur l&#039;application web et/ou lorsque le réseau est instable.
    </p>
    <p class="simpara">
     Les accès potentiellement malicieux sont indétectables avec la suppression
     soudaine d&#039;une session.
    </p>
    <p class="simpara">
     Au lieu de supprimer les sessions obsolètes immédiatement, les développeurs
     doivent définir un court temps d&#039;expiration (timestamp) dans
     <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>, et interdire l&#039;accès aux données de session.
    </p>
    <p class="simpara">
     Les développeurs ne doivent pas interdire l&#039;accès aux données des 
     anciennes sessions immédiatement après l&#039;exécution de la fonction 
     <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>. L&#039;accès doit être interdit
     à un stade ultérieur ; c.-à-d. quelques secondes après pour les réseaux
     stables, comme un réseau filaire et quelques minutes après pour les réseaux
     instables comme des téléphones mobiles ou des réseaux Wi-Fi.
    </p>
    <p class="simpara">
     Si un utilisateur accède à une session obsolète (session ayant expirée), l&#039;accès
     à cette session doit être refusé. Il est également recommandé de supprimer le
     statut d&#039;authentification de toutes les sessions utilisateurs, car cela
     peut représenter un axe d&#039;attaque.
    </p>
   </div>
   
   <p class="para">
    L&#039;utilisation de la directive <a href="session.configuration.php#ini.session.use-only-cookies" class="link">session.use_only_cookies</a> et de la fonction
    <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span> peuvent causer des DoS personnel
    avec des cookies non-supprimés définis par les attaquants. Dans ce cas,
    les développeurs peuvent inviter les utilisateurs à supprimer les cookies
    et les avertir qu&#039;ils peuvent rencontrer un problème de sécurité.
    Les attaquants peuvent définir des cookies malicieux via une application
    web vulnérable, un plugin de navigateur exposé ou vicié, un périphérique
    physique compromis, etc.
   </p>
   
   <div class="warning"><strong class="warning">Avertissement</strong>
    <p class="simpara">
     Il ne faut pas se méprendre sur le risque DoS. <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>=On
     est obligatoire pour la sécurité des identifiants de session !
     Tous les sites sont encouragés à activer la directive 
     <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>.     
    </p>
    <p class="simpara">
     DoS peut uniquement survenir lorsque le compte subit une attaque. Une injection
     Javascript dans une application représente la plupart des axes d&#039;attaque.
    </p>
   </div>
   
   </div>
   
   <div class="sect2" id="features.session.security.management.session-data-deletion">
    <h3 class="title">Suppression des données de session</h3>
    
    <p class="para">
     Les données de sessions obsolètes doivent être inaccessibles
     et doivent être supprimées. Le module courant de session
     ne prend pas en charge cet aspect.
    </p>
    
    <p class="para">
     Les données de sessions obsolètes doivent être supprimées aussi vite
     que possible. Cependant, les sessions actives ne doivent pas être
     supprimées instantanément. Pour satisfaire ces recommandations, les développeurs
     eux-mêmes doivent implémenter un gestionnaire des données de session basé sur
     un timestamp.
    </p>
    
    <p class="para">
     Définir et gérer l&#039;expiration du timestamp dans la variable
     globale $_SESSION. Interdire l&#039;accès aux données de sessions
     périmées. Lorsqu&#039;un accès à des données de session obsolète est détecté,
     il convient de supprimer toutes les statuts authentifiés des sessions
     utilisateurs et forcer les utilisateurs à s&#039;authentifier de nouveau.
     L&#039;accès à des données de sessions obsolètes peut représenter une attaque.
     Pour arriver à cette fin, les développeurs doivent suivre toutes les sessions
     actives de tous les utilisateurs.
    </p>
    
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <span class="simpara">
      L&#039;accès à une session obsolète peut également survenir à cause d&#039;un réseau instable
      et/ou d&#039;un accès concurrent à un site web, c.-à-d. le serveur tente de définir un
      nouvel identifiant de session via un cookie, mais le paquet Set-Cookie n&#039;a jamais
      atteint le client en raison d&#039;une perte de connexion. Une connexion peut
      créer un nouvel identifiant de session via la fonction <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>,
      mais une autre connexion concurrente peut ne pas avoir encore reçu
      l&#039;identifiant de session. Toutefois, les développeurs doivent interdire l&#039;accès
      à une session obsolète à un moment plus éloigné. c.-à-d. la gestion des sessions
      basés sur le timestamp est obligatoire.
     </span>
    </p></blockquote>
    
    <p class="para">
     En résumé, les données de sessions ne doivent pas être détruites avec la fonction
     <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>, ni avec la fonction <span class="function"><a href="function.session-destroy.php" class="function">session_destroy()</a></span>,
     mais les timestamps doivent être utilisés pour contrôler l&#039;accès aux données de
     session. Laissez la fonction <span class="function"><a href="function.session-gc.php" class="function">session_gc()</a></span> supprimer les données obsolètes
     depuis le stockage des données de sessions.
    </p>
    
   </div>
   
   <div class="sect2" id="features.session.security.management.session-locking">
    <h3 class="title">Session et Verrouillage</h3>
    
    <p class="para">
     Les données de session sont verrouillées par défaut pour éviter les
     accès concurrent. Le verrouillage est obligatoire pour conserver une
     consistance des données de session au travers les requêtes.
    </p>
    
    <p class="para">
     Cependant, le verrouillage de session peut être utilisé par les attaquants
     pour réaliser des attaques DoS. Pour minimiser le risque d&#039;une attaque DoS
     par verrouillage de session, il convient de minimiser les verrous.
     Utiliser des données en lecture seule lorsque les données de session
     n&#039;ont pas besoin d&#039;être mises à jour. Utiliser l&#039;option &#039;read_and_close&#039;
     avec la fonction <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span>.
     <code class="code">session_start([&#039;read_and_close&#039;=&gt;1]);</code> va clôre
     la session aussi vite que possible après la mise à jour de la variable
     globale $_SESSION en utilisant la fonction <span class="function"><a href="function.session-commit.php" class="function">session_commit()</a></span>.
    </p>
    
    <p class="para">
     Le module de session courant <em>ne détecte pas</em>
     toutes les modifications de la variable $_SESSION lorsque
     la session est inactive. Il en va de la responsabilité du développeur
     de ne pas modifier la variable $_SESSION lorsque la session est inactive.
    </p>
    
   </div>
   
   <div class="sect2" id="features.session.security.management.active-sessions">
    <h3 class="title">Sessions actives</h3>
    
    <p class="para">
     Les développeurs doivent conserver une trace de toutes les sessions
     actives de chaque utilisateur, et leur notifier le nombre de sessions
     actives, depuis quelle adresse IP, depuis combien de temps, etc.
     PHP ne conserve pas de traces de ces informations. Les développeurs
     sont supposés le faire eux-mêmes.
    </p>
    
    <p class="para">
     Il existe différentes façons de faire cela. Une implémentation possible
     est de définir une base de données qui conserve une trace des données
     nécessaires, et y stocker toutes les informations pertinentes.
     Depuis que les données de session sont GCed, les développeurs doivent
     faire attention aux données GCed pour maintenir la base de données
     des sessions actives consistante.
    </p>
    
    <p class="para">
     Une des implémentations simple est &quot;l&#039;identifiant utilisateur préfixant
     l&#039;identifiant de session&quot; et stocker les informations nécessaires dans
     la variable $_SESSION. La plupart des bases de données sont relativement
     performantes pour sélectionner un préfixe sous la forme d&#039;une <a href="language.types.string.php" class="link">chaîne de caractères</a>.
     Les développeurs DOIVENT utiliser la fonction <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>
     ainsi que la fonction <span class="function"><a href="function.session-create-id.php" class="function">session_create_id()</a></span> pour cela.
    </p>
    
    <div class="warning"><strong class="warning">Avertissement</strong>
     <p class="simpara">
      N&#039;utiliser jamais de données confidentielles comme préfixe.
      Si l&#039;identifiant utilisateur est confidentiel, il est recommandé d&#039;utiliser
      la fonction <span class="function"><a href="function.hash-hmac.php" class="function">hash_hmac()</a></span>.
     </p>
    </div>
    
    <div class="warning"><strong class="warning">Avertissement</strong>
     <p class="simpara">
      L&#039;activation de la directive
      <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
      est obligatoire pour ce type de configuration. Il faut s&#039;assurer qu&#039;il
      est activé. Sinon, la base de données des sessions actives
      peut être compromise.
     </p>
    </div>
    
    <p class="para">
     Le gestionnaire de session basé sur un timestamp est obligatoire
     pour détecter l&#039;accès à des sessions obsolètes. Lorsque l&#039;accès à une
     session obsolète est détecté, le drapeau d&#039;authentification doit
     être supprimé de toutes les sessions actives de l&#039;utilisateur.
     Ceci permet d&#039;éviter aux attaquants de continuer à exploiter les sessions
     volées.
    </p>
    
   </div>
   
   <div class="sect2" id="features.session.security.management.session-and-autologin">
    <h3 class="title">Session et l&#039;auto-identification</h3>
    
    <p class="para">
     Les développeurs ne doivent pas utiliser d&#039;identifiants de session avec une
     grande durée de vie pour l&#039;auto-identification, car cela accroit le risque
     d&#039;utiliser des sessions volées. Une fonctionnalité d&#039;auto-identification
     doit être implémentée par le développeur.
    </p>
    
    <p class="para">
     Utiliser une clé de hachage sécurisé à usage unique comme clé
     d&#039;auto-identification en utilisant la fonction
     <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>. Utiliser un hachage sécurisé
     plus fort que SHA-2. c.-à-d. SHA-256 ou supérieur avec des données
     aléatoires depuis la fonction <span class="function"><a href="function.random-bytes.php" class="function">random_bytes()</a></span>
     ou via <var class="filename">/dev/urandom</var>.
    </p>
    
    <p class="para">
     Si l&#039;utilisateur est non authentifié, vérifiez si la clé d&#039;auto-identification
     à usage unique est valide ou non. Dans ce cas où elle est valide, authentifiez
     l&#039;utilisateur et définissez une nouvelle clé de hachage sécurisée à usage unique.
     Une clé d&#039;auto-identification ne doit être utilisée qu&#039;une seule fois, c.-à-d. n&#039;utiliser
     jamais une clé d&#039;auto-identification, et régénérez-la toujours.
    </p>
    
    <p class="para">
     Une clé d&#039;auto-identification est une clé d&#039;authentification avec une
     longue durée, elle doit être protégée autant que possible.
     Utiliser les attributs de cookie path/httponly/secure/SameSite pour la sécurité.
     c.-à-d. ne transmettez jamais la clé d&#039;auto-identification tant que cela
     n&#039;est pas nécessaire.
    </p>
    
    <p class="para">
     Les développeurs doivent implémenter les fonctionnalités qui
     désactivent l&#039;auto-identification, et suppriment les cookies
     contenant les clés d&#039;auto-identification non nécessaires.
    </p>
    
   </div>
   
   <div class="sect2" id="features.session.security.management.csrf">
    <h3 class="title">Attaques CSRF (Cross-Site Request Forgeries)</h3>
    
    <p class="para">
     Les sessions et les authentifications ne protègent pas contre les
     attaques CSRF. Les développeurs doivent implémenter des protections
     CSRF eux-mêmes.
    </p>
    
    <p class="para">
     La fonction <span class="function"><a href="function.output-add-rewrite-var.php" class="function">output_add_rewrite_var()</a></span> peut être utilisée pour
     la protection CSRF. Se référer aux pages du manuel pour plus de détails.
    </p>
    
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <span class="simpara">
      PHP, avant sa version 7.2.0, utilise le même buffer de sortie et les
      mêmes configurations INI que la configuration trans-sid. Toutefois, l&#039;utilisation
      de la fonction <span class="function"><a href="function.output-add-rewrite-var.php" class="function">output_add_rewrite_var()</a></span> avec les versions
      de PHP antérieures à 7.2.0 n&#039;est pas conseillée.
     </span>
    </p></blockquote>
    
    <p class="para">
     La plupart des frameworks d&#039;applications web supportent
     la protection CSRF. Se référer au manuel du
     framework d&#039;application web pour plus de détails.
    </p>
    
    <p class="para">
     À partir de PHP 7.3, l&#039;attribut SameSite du cookie de session peut être défini.
     Ceci est une mesure supplémentaire qui peut minimiser
     les vulnérabilités CSRF.
    </p>
   </div>
 </div><?php manual_footer($setup); ?>