125 votes

PHP Session Security

Quelles sont les lignes directrices pour maintenir une sécurité de session responsable avec PHP? Il y a des informations partout sur le web et il est temps que tout soit arrivé au même endroit!

88voto

grom Points 8057

Il ya un couple de choses à faire afin de garder votre session sécurisée:

  1. Utiliser SSL pour l'authentification des utilisateurs ou d'effectuer des opérations sensibles.
  2. Régénérer l'id de session à chaque fois que le niveau de sécurité des modifications (comme la connexion). Vous pouvez même régénérer l'id de session à chaque demande, si vous le souhaitez.
  3. Avez sessions
  4. N'utilisez pas de register globals
  5. Stocker les informations d'authentification sur le serveur. C'est, de ne pas envoyer les détails tels que le nom d'utilisateur dans le cookie.
  6. Vérifier l' $_SERVER['HTTP_USER_AGENT']. Cela ajoute une petite barrière pour détournement de session. Vous pouvez également vérifier l'adresse IP. Mais cela pose des problèmes pour les utilisateurs qui ont changer 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. Verrouiller l'accès à la session sur le système de fichiers ou l'utilisation de session personnalisé de manutention
  8. Pour les opérations sensibles envisager d'exiger que les utilisateurs connectés à fournir à leurs authenication à nouveau les détails de

15voto

saint_groceon Points 2696

Une directive consiste à appeler session_regenerate_id chaque fois que le niveau de sécurité d'une session change. Cela permet d'éviter le détournement de session.

11voto

cmcculloh Points 11040

Je pense que l'un des problèmes majeurs (qui est traitée dans PHP 6) est register_globals. Actuellement l'une des méthodes standard utilisées pour éviter register_globals est d'utiliser l' $_REQUEST, $_GET ou $_POST tableaux.

La "bonne" façon de faire (de 5.2, même si il est un peu buggé là, mais stable que de 6, ce qui est à venir bientôt) est grâce à des filtres.

Ainsi, au lieu de:

$username = $_POST["username"];

vous feriez:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

ou même juste:

$username = filter_input(INPUT_POST, 'username');

11voto

takeshin Points 16579

Mes deux (ou plus) cents:

  • Ne faites confiance à personne
  • Filtre d'entrée, échapper à la sortie (cookies, les données de session sont vos commentaires trop)
  • Éviter les attaques de type XSS (conserver votre code HTML bien formé, jetez un oeil à PHPTAL ou HTMLPurifier)
  • Défense en profondeur
  • Ne pas exposer les données

Il est minuscule mais bon livre sur ce sujet: Essentiel PHP Security by Chris Shiflett.

Essential PHP Security

Sur la page d'accueil de ce livre, vous trouverez d'intéressants exemples de code et des exemples de chapitres.

Vous pouvez utiliser la technique mentionnée ci-dessus (l'IP et le UserAgent), décrit ici: Comment éviter le vol d'identité

9voto

raspi Points 2792

Ce document de fixation de session contient de très bons pointeurs d’attaque. Voir aussi la page de fixation de session sur Wikipedia .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X