web-dev-qa-db-fra.com

JWT est-il sûr?

J'apprends JWT pour la sécurité de mon projet, mais j'ai une question. Si je reçois le jeton correctement après avoir fait la connexion, mais que quelqu'un d'autre (pirate) à un autre endroit vole ce jeton spécifique, peut-il accéder à ma session? Le serveur qui utilise l'authentification JWT est capable de détecter cela et de me protéger? Comment?

28
in3pi2

Seul le serveur doit connaître le "secret" utilisé pour générer le JWT. Si quelqu'un modifie les données contenues dans le JWT, le serveur ne parviendra pas à le décoder. Ainsi, le serveur peut faire confiance à n'importe quel JWT qu'il peut décoder.

Cependant, si un pirate avait accès à votre ordinateur, il pourrait voir le JWT stocké dans le navigateur et l'utiliser. Cette même menace existe avec les cookies, donc ce n'est pas vraiment une faille du JWT.

Une façon d'atténuer cette menace est la date d'expiration du JWT. Pour une application bancaire, votre JWT peut expirer après quelques minutes. Pour Facebook, il pourrait expirer après quelques mois. Cependant, il n'y a pas de solution à l'épreuve des balles si quelqu'un a accès à votre navigateur.

Une autre approche pour les pirates serait une attaque "homme au milieu" pour intercepter le trafic réseau entre le client et le serveur et accéder au cookie/JWT. Le cookie/JWT doit toujours être envoyé via HTTPS pour éviter cela.

MODIFICATION IMPORTANTE

Enfin, pour répondre à la question dans votre titre, "Quelle est la sécurité de JWT?": Cela dépend de la façon dont vous stockez le jeton. Le stockage local n'est pas aussi sécurisé que l'utilisation de cookies ( référence ) mais les cookies peuvent être soumis à CSRF ou XSRF exploits.

Cette réponse disait que JWT était plus sûr que les cookies, car les cookies étaient soumis à des attaques CSRF. Mais le stockage de JWT dans le stockage local n'est pas sûr non plus. Par conséquent, je ne stocke plus mon JWT dans le stockage local et j'utilise des techniques bien connues pour atténuer les attaques CSRF.

47
Sunil D.