Conseils sur les cookies signés au lieu des sessions
Je suis en train d'étudier l'amerrissage forcé de PHP $_SESSION
(c'est à dire du côté serveur, le gestionnaire de session, pour ajouter un peu indépendant de la langue saveur) et signé à l'aide de cookies au lieu de cela, depuis que j'en ai entendu beaucoup de bien sur eux (Flickr utilise, de sorte qu'ils devraient être assez bon pour moi aussi).
Je comprends le contexte de base de la technique: Utilisation des cookies librement passer les paires clé-valeur du client vers le serveur, et de les signer pour s'assurer que les valeurs ne sont pas altérés.
Mais ce serait une bonne façon de mettre en œuvre la partie de signature? Aussi, étant donné que la circulation sera probablement HTTP, est-il un bon moyen pour envoyer des données sensibles (telles qu'un mot de passe utilisateur) avec cette méthode, tout en travaillant à l'encontre de voler les cookies et/ou de la falsification?
source d'informationauteur Henrik Paul
Vous devez vous connecter pour publier un commentaire.
Pourquoi s'embêter?
Je ne voudrais pas utiliser cette technique pour les données sensibles. Il peut être utile en combinaison avec une session ordinaire, cependant, vous pouvez donner au client un cookie avec un identifiant de session, mais aussi de toutes ces paires clé/valeur que les besoins de votre application sur chaque page. De cette façon, vous pouvez éviter de heurter votre stockage de session pour chaque demande de page.
Vous devriez vous efforcer de garder la quantité de données assez serré, car il va être envoyée avec chaque demande.
Avec cela à l'esprit, au-delà...
Signature de données avec une valeur de hachage
Si les données ne sont pas sensibles, vous pouvez vous inscrire les valeurs avec sha1 de hachage faite à partir d'une combinaison des paires clé/valeur et un secret partagé. par exemple,
Maintenant donner au client un cookie avec toutes les valeurs et le code de hachage. Vous pouvez vérifier le hash lorsque le cookie est présenté. Si le hachage de vous calculer à partir des valeurs présentées par le client ne correspond pas à celle attendue de hachage, vous savez que les valeurs ont été trafiqués.
Crypter les données sensibles
Pour les données sensibles, vous aurez besoin de chiffrer les valeurs. Découvrez la mcrypt extension qui offre beaucoup de fonctions cryptographiques.
Cookie vol
En ce qui concerne cookie voler, si vous mettez les informations d'identification d'utilisateur dans un cookie, et de lui faire confiance, quelqu'un qui obtient ce cookie peut usurper l'identité de l'utilisateur jusqu'à ce que le mot de passe est modifié. Une bonne pratique est de se rappeler comment vous avez authentifié l'utilisateur, et n'accorde certains privilèges si le consentement explicite de l'utilisateur connecté. Par exemple, pour un forum qui vous permettra peut-être de quelqu'un post, mais pas de modifier leur compte à des détails comme l'adresse e-mail.
Il existe d'autres techniques pour "autologin" cookies", impliquant de donner de tels témoins d'une valeur de jeton qui vous permettent seulement d'être utilisée qu'une fois. Voici un bon article sur cette technique.
Vous pouvez aussi regarder y compris l'adresse IP du client pour un signé cookie, et si elle ne correspond pas à l'adresse IP de présenter le cookie, vous obtenez de se connecter à nouveau. Cela offre plus de protection, mais ne fonctionne pas pour les personnes dont l'apparente adresse IP ne cesse de changer. Vous pourriez faire une option, et donner à l'utilisateur un moyen de refuser. Juste un ralenti de la pensée, je n'ai pas vu que faire en pratique 🙂
Pour un bel article qui explique session de vol, de détourner et de la fixation de la voir Les Sessions et les Cookies qui offre un peu plus de techniques pour tenter, comme l'utilisation de l'-tête User-Agent comme une signature supplémentaire.
J'ai fait CookieStorage exactement à cette fin. Toutes les valeurs stockées sont bien signé avec la clé privée via RIPEMD160 de hachage (et salé avec le temps), et éventuellement crypté avec RIJNDAEL256.
Chaque valeur est stockée avec le timestamp, qui est récupérable.
Signé exemple.
Exemple chiffré.
Si vous préférez, vous pouvez utiliser le hachage/crypter/décrypter les fonctions de votre choix.
Signé cookies en PHP
Autres réponses à cette question sont un peu dépassées. PHP 5.2 ajout de la
httponly
paramètre à lasetcookie
fonction, de manière efficace d'ajouter natif signé le support des cookies. Selon lesetcookie
fonction httponly paramètre de la documentation:Réglage de ce paramètre à true permet aussi de désactiver la possibilité de modifier ce cookie à l'aide de navigateur et d'autres outils en ligne, tels que google Chrome DevTools. Pour faire de la signature de témoins même plus sécurisé je recommande fortement se rétrécissant vers le bas le chemin d'accès ou de domaine qu'il utilise. Vous pouvez spécifier à l'aide de la
path
etdomain
paramètres. Et bien sûr, il ne fait jamais de mal à fixer le cookie à l'aide de lasecure
paramètre si votre site web est en cours de chargement sur HTTPS. Le résultat sera une ligne comme ceci:Pourquoi utiliser signé cookies?
Il y a, en fait, des situations précises dans lesquelles signé les cookies sont utiles tandis que d'autres méthodes, comme par exemple une session, ne le sont pas. Par exemple, supposons le site/l'application en question utilise un équilibreur de charge pour améliorer les performances. Maintenant, supposons que la charge de l'équilibreur a plusieurs serveurs physiques à partir de laquelle les fichiers sont servis, et un collant session option n'est pas disponible. Dans une telle situation, signé cookies sont pratiquement le seul moyen sûr pour préserver l'état en PHP.