web-dev-qa-db-fra.com

Mot de passe en texte brut sur HTTPS

Je travaille actuellement sur un fournisseur PHP OpenID qui fonctionnera sur HTTPS (donc SSL crypté).
Est-ce faux pour moi de transmettre le mot de passe en texte brut? HTTPS en théorie, ne peut pas être intercepté, donc je ne vois rien de mal. Ou est-ce dangereux à un certain niveau et je ne vois pas cela?

80
WhyNotHugo

C'est sûr. C'est ainsi que tout le Web fonctionne. Tous les mots de passe dans les formulaires sont toujours envoyés en texte brut, donc c'est à HTTPS de le sécuriser.

110
Eduardo Scoz

Vous devez toujours vous assurer que vous l'envoyez via POST, pas GET. Si vous l'envoyez via une demande GET, il pourrait être enregistré en clair dans les journaux d'historique du navigateur de l'utilisateur ou les journaux d'accès du serveur Web .

66
Andrew Medico

Si HTTP est désactivé et que vous niquement utilisez HTTPS, vous ne transmettez pas vraiment le mot de passe en texte brut de toute façon.

20
Can Berk Güder

Hachage côté client. Pourquoi? Permettez-moi de vous parler d'une petite expérience. Rendez-vous à l'ordinateur dans la cafétéria de l'entreprise. Ouvrez le navigateur vers la page de connexion au site Web de l'entreprise (https). Appuyez sur F12, cliquez sur l'onglet réseau, cochez le journal de persistance, minimisez la console mais laissez la page Web ouverte à la page de connexion. Asseyez-vous et déjeunez. Regardez comme un employé après que l'employé se connecte au site Web de l'entreprise et qu'un bon petit travailleur se déconnecte une fois terminé. Terminez le déjeuner, asseyez-vous à l'onglet du réseau de l'ordinateur et voyez chaque nom d'utilisateur et mot de passe en texte brut dans le formulaire bodys.

Aucun outil spécial, aucune connaissance particulière, aucun matériel de piratage sophistiqué, aucun enregistreur de frappe juste un bon vieux F12.

Mais bon, continuez à penser que tout ce dont vous avez besoin est SSL. Les méchants t'aimeront pour ça.

11
CodeDog

Les autres affiches sont correctes. Maintenant que vous utilisez SSL pour crypter le transmission du mot de passe, assurez-vous de le hacher avec un bon algorithme et du sel afin qu'il soit protégé quand il est au repos, aussi...

5
grossvogel

Prenons quelques notes sur les réponses précédentes.

Tout d'abord, ce n'est probablement pas la meilleure idée d'utiliser les algorithmes de hachage côté client. Si votre mot de passe est salé côté serveur, vous ne pourrez pas comparer les hachages (du moins pas si vous ne stockez pas le hachage client dans la base de données dans l'une des couches de hachage du mot de passe, qui est identique ou pire). Et vous ne voulez pas implémenter l'algorithme de hachage utilisé par la base de données côté client, ce serait idiot.

Deuxièmement, l'échange de clés cryptographiques n'est pas idéal non plus. Le MITM pourrait théoriquement (considérant qu'il a un certificat racine installé sur le client) changer les clés cryptographiques, et changer avec ses propres clés:

Connexion d'origine (ne tenant pas compte des tls) à partir d'un serveur théorique qui échange des clés:

Client demande des clés publiques> le serveur détient les clés privées, génère des clés publiques pour le client> le serveur envoie les clés publiques au client

Maintenant, dans une piste théorique MITM:

Client demande des clés publiques> MITM génère de fausses clés privées> Le serveur détient les clés privées, génère des clés publiques pour le client> MITM reçoit les clés publiques du serveur d'origine, maintenant, nous sommes libres pour envoyer nos fausses clés publiques au client, et chaque fois qu'une demande vient du client, nous décrypterons les données du client avec les fausses clés, changerons la charge utile (ou les lirons) et crypterons avec les clés publiques d'origine> MITM envoie de fausses clés publiques au client.

C'est le point d'avoir un certificat CA de confiance dans TLS, et c'est ainsi que vous recevez un message du navigateur vous avertissant si le certificat n'est pas valide.

En réponse à l'OP: à mon humble avis, vous ne pouvez pas le faire, car tôt ou tard, quelqu'un voudra attaquer un utilisateur de votre service et tentera de briser votre protocole.

Ce que vous pouvez faire, cependant, est d'implémenter 2FA pour empêcher les gens d'essayer de se connecter avec le même mot de passe. Attention aux attaques par rejeu, cependant.

Je ne suis pas doué pour la cryptographie, veuillez me corriger si je me trompe.

2
Lucca Ferri