Je travaille sur un site web et je veux créer une connexion et une session utilisateur. Quel est le moyen le plus sûr de vérifier si une session existe ou non (comme un contrôle de cookie ou de variable de session), ou une meilleure idée d'utiliser des sessions en php?façon la plus sûre de créer des sessions en php
Répondre
session_id()
retourne t l'identifiant de session pour la session en cours ou la chaîne vide ("") s'il n'y a pas de session en cours (aucun identifiant de session actuel n'existe).
mais vous indique juste si une session est active ou non.
la plupart du temps, j'appelle simplement session_start();
au début de chaque script (même si l'utilisateur n'est pas connecté). lors de la connexion, j'ai défini $_SESSION['user']
avec l'ID utilisateur ou un objet utilisateur. à la déconnexion, je viens de unset($_SESSION['user']);
. en vérifiant empty($_SESSION['user'])
je peux vérifier si quelqu'un est encore connecté ou non. ne le faites pas si vous stockez des informations dépendant de l'utilisateur ailleurs dans votre session, sinon le prochain type qui se connecte peut obtenir des informations qu'il n'est pas supposé voir (dans ce cas, utilisez session_destroy();
).
mais la sécurité? Il suffit de désactiver la propagation de l'identifiant de session par les réécritures d'url GET/POST (cookies uniquement), afin qu'elles ne se retrouvent pas dans les URL pouvant être mises en cache ou distribuées aux autres (dans ce cas, le piratage de session serait possible). vous pouvez le faire en définissant session.use_only_cookies
dans le fichier php.ini. Il peut y avoir des problèmes de sécurité supplémentaires si vous hébergez sur un serveur partagé non approuvé et/ou mal configuré - cela pourrait amener d'autres personnes sur la même machine à lire vos données de session. Dans ce cas, vous pouvez stocker vos données de session dans une base de données en réécrivant votre gestionnaire de session. Il suffit de chercher session handler mysql
sur les intertubes, je suis sûr qu'il y a assez de solutions prêtes à l'emploi. et ne stockez pas d'informations sensibles comme des mots de passe dans la session, mieux vaut faire une requête chaque fois que vous avez besoin de le comparer. À part ça ... utilisez ssl/https pour la gestion des connexions et des utilisateurs, donc aucun mot de passe en clair n'est transféré. Ne stockez que pw-hashes avec du sel dans la base de données. ne laissez personne voir les mots de passe (ce qui signifie: ne les imprimez jamais en HTML ou par courriel). n'utilisez pas les valeurs auto_increment pour les identifiants que l'utilisateur peut voir (et donc deviner). ok, c'est déjà hors de la portée des questions.
Voici quelques tutoriels sur la session de sécurité
- PHP Security Guide: Sessions
- Notes on PHP Session Security
- PHP Session Security - php|works 2004 (ancienne mais toujours intéressantes)
- PHP Session Security (PDF)
Les documents PDF ne fonctionnent pas. –
- 1. Meilleure façon d'authentifier en PHP
- 2. Meilleure façon d'utiliser des sessions avec MVC et OO PHP
- 3. Façon sûre et sûre de mettre à jour sur Internet en C#
- 4. Mauvaise gestion des variables de sessions PHP?
- 5. PHP + rediriger avec des sessions
- 6. Quelle est la meilleure façon de créer des vignettes à partir de la vidéo en PHP?
- 7. Travailler avec des sessions - PHP
- 8. Gestion de session en PHP
- 9. Utiliser des sessions PHP exclusivement pour chatter
- 10. Question rapide sur les sessions en PHP
- 11. Sessions PHP Expiration inattendue
- 12. PHP - Sessions - Sécurité
- 13. Cross domain PHP Sessions
- 14. Comment accéder au contrôle C# WPF de façon sûre?
- 15. Avertissement: Sessions d'autorisation refusées/en-têtes déjà envoyés en PHP
- 16. Est-ce que ma compréhension des sessions PHP est correcte?
- 17. Système de connexion (PHP) Cookies et Sessions
- 18. La meilleure façon de créer des flux de mot
- 19. PHP: règles de pouce pour les sessions
- 20. PHP; utiliser des sessions ou réutiliser une requête?
- 21. La bonne façon de créer des références de service WCF?
- 22. Numéro Ajax, PHP et Sessions
- 23. Comment utiliser les sessions php dans xslt?
- 24. Comment puis-je utiliser des tableaux multidimensionnels en PHP avec des sessions MySQL?
- 25. Comment créer des objets dynamiquement de façon élégante en python?
- 26. Quelle est la meilleure façon de créer des déploiements ClickOnce
- 27. netTcpBinding - Sessions de sécurité en attente
- 28. Version sûre de Path.Combine
- 29. Ne plus rediriger vers les sessions/new?
- 30. Sécuriser des sessions
'et ne stockez pas les informations sensibles comme les mots de passe dans la session, mieux vaut faire une requête chaque fois que vous avez besoin de le comparer.' - Eh bien, je pense qu'il est plus rapide de stocker une version cryptée unidirectionnelle du mot de passe (md5 + hash), et de le vérifier à la place de refaire la requête à la db encore et encore – Strae
vrai, mais normalement vous n'avez pas besoin de vérifier le mot de passe sur chaque page vue, seulement sur # 1: se connecter et # 2: le changer (si vous demandez à l'utilisateur de fournir le pw actuel pour en définir un nouveau). pour # 1 vous devez interroger la base de données, et # 2 ne se produit pas très souvent, de sorte que le surcoût supplémentaire est négligeable. – stefs