Quelles sont les meilleures pratiques pour l'authentification Web basée sur les cookies?

11

Je travaille sur un petit projet parallèle utilisant CGI et Python (l'évolutivité n'est pas un problème et il doit s'agir d'un système TRÈS simple.)

Je pensais à implémenter l'authentification à l'aide de cookies et je me demandais s'il existait des meilleures pratiques établies.

Lorsque l'utilisateur s'authentifie avec succès, je souhaite utiliser des cookies pour déterminer qui est connecté. Selon les meilleures pratiques, quels éléments devraient être stockés dans un tel cookie?

rdasxy
la source

Réponses:

12

Meilleur cas: un ID unique qui se rapporte à toutes les autres informations dont vous avez besoin, qui à son tour est stocké dans une base de données.

Il y a des moments où il est logique d'y mettre d'autres informations, mais elles sont rares. Vous devez toujours vous demander pourquoi, au moins cinq fois .

SSL protégera vos utilisateurs contre le détournement de session mais, même dans ce cas, ne stockez jamais d'informations sensibles non chiffrées dans un cookie. Il est, essentiellement, stocké en texte brut sur le disque dur.

Enfin et surtout, protégez votre utilisateur contre les attaques XSS et CSRF .

La protection XSS est généralement aussi simple que d'être prudent lorsque vous incluez Javascript, car Javascript sur un autre serveur peut être modifié à votre insu, et ce Javascript a accès aux données des cookies. Donc, si vous utilisez le réseau de diffusion de contenu d'Evil Corp pour servir votre script jQuery, ils peuvent soudainement ajouter du code pour leur envoyer les cookies de vos utilisateurs. Vous ne sauriez pas; vos utilisateurs ne le sauraient pas.

Téléchargez des scripts et servez-les depuis votre propre serveur ou utilisez des CDN très fiables tels que Google ou Yahoo.

La protection CSRF se fait généralement en ayant une valeur aléatoire dans un champ caché d'un formulaire. La valeur est conservée dans la session afin que lorsque le formulaire est soumis à nouveau, vous pouvez vérifier qu'il provient du même ordinateur.

La plupart des frameworks Web disposent désormais de techniques très simples pour inclure ce jeton.

pdr
la source
3
  • Utilisez les drapeaux secureet httpOnly.
  • Encodez les données du cookie de session et signez cryptographiquement les données encodées avec un MAC. Vérifiez la signature sur le serveur à chaque fois, avant de vous soucier de décoder les données du cookie de session. (Rails fait cela par défaut.)
yfeldblum
la source