2008-10-20 4 views
3

Quelle est la sécurité des sessions PHP? Je prévois d'utiliser les sessions PHP natives pour authentifier les utilisateurs. Les utilisateurs peuvent-ils modifier les données de session comme ils peuvent les données $ _POST et $ _GET?PHP - Sessions - Sécurité

Répondre

6

les données sont envoyées uniquement dans une session lorsque vous avez le développeur à l'utilisateur qu'il a mis dans la session via le code que vous écrivez. Par conséquent, les sessions sont aussi sécurisées que les données que vous autorisez, et comment vous faites confiance et utilisez ces données. En outre, les sessions sont basées sur un identificateur de session que le client utilise pour identifier l'utilisateur de la session. Si quelqu'un détourne un sessionID, alors il peut émuler l'utilisateur dont il a volé l'identifiant de session. Cela peut arriver dans une communication non SSH. Donc, ne faites pas confiance à un identifiant de session pour identifier un utilisateur (pour des choses importantes) à moins qu'il ne se soit connecté et que le sessionID ait été transmis en mode sécurisé. La prochaine question de sécurité serait la "devinabilité" d'un sessionID que vous avez envoyé à l'utilisateur. Si vous manipulez les choses que je mentionne ci-dessus, au moment où vous y arriverez et dans la documentation, vous comprendrez à quel point les identifiants de session PHP sont "devinables".

Enfin, faites attention aux attaques XSS. Il y a plusieurs messages sur Internet qui expliquent comment minimiser l'incidence de XSS.

3

Les sessions PHP sont aussi sécurisées que le cookie de session donné à l'utilisateur. Toutes les données de la session sont stockées côté serveur, de sorte que les utilisateurs ne peuvent pas les modifier arbitrairement, à l'exception des fonctionnalités fournies par votre site. Cependant, les cookies de session PHP sont une cible commune pour les attaques XSS (cross-site scripting) et CSRF (cross-site request forgery). De même, les sessions sont un bon moyen d'authentifier les utilisateurs tant que vous êtes conscient des risques potentiels.

Quelques liens Wikipédia:

CSRF

XSS

+0

Comment pouvez-vous faire l'authentification? $ _SESSION est le seul moyen dont on parle. –

+0

La seule autre façon que je l'ai fait était il y a longtemps dans Perl en stockant le nom d'utilisateur/cookies de mot de passe hachés sur la machine client et en lisant ceux dans chaque chargement de page. Un peu risqué; quelqu'un accède aux cookies sur la machine après que vous puissiez accéder à votre compte à tout moment s'ils copient votre cookie. – Randy

+0

Dans certains environnements, vous pouvez également potentiellement effectuer une authentification côté serveur basée sur IP (par exemple, lorsque vous obtenez des informations d'identification de connexion valides, stockez l'adresse IP et un horodatage d'expiration dans la base de données du serveur). Cela ne fonctionne évidemment pas bien avec les NAT ou les serveurs proxy. – Randy