Sécurité des sessions PHP

Quelles sont les consignes pour maintenir une sécurité de session responsable avec PHP ? Il y a des informations partout sur le Web et il est grand temps que tout atterrisse au même endroit !

请先 登录 后评论

4 réponses

John Downey

Le principal problème avec les sessions PHP et la sécurité (en plus du piratage de session) vient de l'environnement dans lequel vous vous trouvez. Par défaut, PHP stocke les données de session dans un fichier dans le répertoire temporaire du système d'exploitation. Sans aucune réflexion ou planification particulière, il s'agit d'un répertoire lisible par le monde entier, de sorte que toutes vos informations de session sont publiques pour toute personne ayant accès au serveur.

En ce qui concerne le maintien des sessions sur plusieurs serveurs. À ce stade, il serait préférable de basculer PHP vers des sessions gérées par l'utilisateur où il appelle vos fonctions fournies à CRUD (créer, lire, mettre à jour, supprimer) les données de session. À ce stade, vous pouvez stocker les informations de session dans une base de données ou une solution de type cache mémoire afin que tous les serveurs d'application aient accès aux données.

Stocker vos propres sessions peut également être avantageux si vous êtes sur un serveur partagé car cela vous permettra de les stocker dans la base de données sur laquelle vous avez souvent plus de contrôle que le système de fichiers.

请先 登录 后评论
Teifion

Je vérifierais à la fois l'IP et l'agent utilisateur pour voir s'ils changent

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
请先 登录 后评论
Eric Lamb

Utiliser une adresse IP n'est pas vraiment la meilleure idée d'après mon expérience. Par exemple; mon bureau a deux adresses IP qui sont utilisées en fonction de la charge et nous rencontrons constamment des problèmes d'utilisation des adresses IP.

Au lieu de cela, j'ai opté pour le stockage des sessions dans une base de données distincte pour les domaines sur mes serveurs. De cette façon, personne sur le système de fichiers n'a accès à ces informations de session. C'était vraiment utile avec phpBB avant la version 3.0 (ils ont corrigé cela depuis) ​​mais c'est toujours une bonne idée je pense.

请先 登录 后评论
grom

Il y a plusieurs choses à faire pour sécuriser votre session :

  1. Utilisez SSL pour authentifier les utilisateurs ou effectuer des opérations sensibles.
  2. Régénérer l'identifiant de session chaque fois que le niveau de sécurité change (comme lors de la connexion). Vous pouvez même régénérer l'identifiant de session à chaque requête si vous le souhaitez.
  3. Faire expirer les sessions
  4. N'utilisez pas de variables globales de registre
  5. Stocker les détails d'authentification sur le serveur. Autrement dit, n'envoyez pas de détails tels que le nom d'utilisateur dans le cookie.
  6. Vérifiez le $_SERVER['HTTP_USER_AGENT']. Cela ajoute une petite barrière au détournement de session. Vous pouvez également vérifier l'adresse IP. Mais cela pose des problèmes aux utilisateurs qui ont changé d'adresse IP en raison de l'équilibrage de charge sur plusieurs connexions Internet, etc. (ce qui est le cas dans notre environnement ici).
  7. Verrouillez l'accès aux sessions sur le système de fichiers ou utilisez une gestion de session personnalisée
  8. Pour les opérations sensibles, pensez à demander aux utilisateurs connectés de fournir à nouveau leurs informations d'authentification
请先 登录 后评论
  • 17 abonnés
  • 0 favoris,475 Feuilleter
  • saint_groceon posée à 2022-12-10 08:07