2010-07-15 2 views
3

J'utilise HTTPS, mais je veux minimiser le risque que quelqu'un maligne ses propres cookies avec un ID de session que quelqu'un d'autre utilise réellement. Comme une variable de session j'ai une date d'expiration donc la session est invalidée si elle n'a pas été utilisée récemment, donc je pense que la fenêtre d'opportunité est quand la victime est active ou a récemment quitté le site sans se déconnecter correctement.piratage de session php - est HTTPS assez? Suggestions pour la prise d'empreintes digitales?

Je ne m'attends pas à d'énormes quantités de trafic et j'utilise les méthodes PHP standard pour générer des ID de session. Je crois que le «risque» que quelqu'un réussisse (ou essaie même) de détourner quelqu'un de sa session ici est proche de zéro. Ce que je voudrais faire, c'est "identifier" l'utilisateur à distance, sans en utilisant $_SERVER['REMOTE_ADDR']. Mes pensées étant que l'attaquant devrait à la fois trouver un ID de session valide, ainsi que usurper l'identité des différentes propriétés de l'utilisateur réel. Je ne veux pas forcer l'utilisateur à utiliser un certificat pour se connecter. Je veux qu'il fonctionne dans tous les navigateurs web standard, même pour ma grand-mère et d'autres personnes non-tech comme elle. Donc, ce que je voulais initialement demander était: y a-t-il des "propriétés" de la session HTTPS qui pourraient être utilisées? Seraient-ils utiles? Si oui, comment puis-je les trouver? phpinfo() ne révèle rien de spécifique à HTTPS. (Est-ce parce httpd ne l'expose pas?)

Dois-je simplement utiliser une concaténation de HTTP_USER_AGENT + HTTP_ACCEPT + HTTP_ACCEPT_LANGUAGE + HTTP_ACCEPT_ENCODING + HTTP_ACCEPT_CHARSET ou quelque chose de similaire qui est supposé être suffisamment unique entre les utilisateurs?

Très heureux pour toutes les réponses! (Mais s'il vous plaît lire la question avant de répondre avec seulement des renvois à d'autres questions sur StackOverflow) Merci!

+1

Assurez-vous de faire toutes vos recherches avant de commencer à vous coder. La sécurité de session est un problème bien connu et si quelqu'un d'autre a une solution bien pensée et testée, je considérerais l'utiliser d'abord. –

+0

@Dana the Sane: et comment savez-vous quand le code du gars de l'autre est meilleur que le vôtre? – symcbean

+0

@Dana the Sane: Je suis d'accord. C'est exactement pourquoi je demande ici. – MattBianco

Répondre

3

Vous devez vous assurer que les indicateurs secure et http_only sont définis dans les cookies de session. Vous devez également modifier le paramètre session_id lorsqu'un utilisateur s'authentifie pour éviter les problèmes de fixation de session. Alors que ce que vous proposez devrait être relativement sûr en termes d'empreintes digitales, ce n'est pas vraiment si sélectif - il y a beaucoup de choses qui ne devraient pas être utilisées pour les empreintes digitales (comme CLIENT_ADDRESS) donc ce n'est pas vraiment très facile à suggérer quelque chose de mieux. En dehors de mes suggestions ci-dessus, je vous recommande de passer votre temps à regarder d'autres problèmes de sécurité potentiels.

C.

2

Le OWASP top 10 est une excellente aide pour cette classe d'attaques. Specificlly vous devez vous soucier de ces trois:

A2: Cross-Site Scripting (XSS)

A3: Broken Authentication and Session Management.

A5: Cross-Site Request Forgery (CSRF) (également appelé "Session Riding")

Presque tous les sont connus _SESSION variables $ à l'attaquant et peut être n'importe quelle valeur. Il ne sert à rien de vérifier ces variables car elles sont triviales pour un attaquant. Une exception importante est $_SERVER['remote_addr'] qui est tirée directement du socket TCP d'apache, ainsi cette valeur ne peut pas être usurpée ou altérée autrement. Cependant, si l'attaquant est sur le même segment de réseau (comme s'il buvait une tasse de café juste derrière vous au café), alors l'attaquant aurait la même adresse IP.

Questions connexes