human
Pour la plupart des sites Web, lorsque vous entrez vos informations de connexion de manière incorrecte, pourquoi le site Web ne peut-il pas vous dire spécifiquement si le nom d'utilisateur ou le mot de passe est incorrect ? Il vous dit généralement que "votre nom d'utilisateur ou votre mot de passe est incorrect". Expliquez comme si j'avais cinq ans.
gpt
Un point secondaire que je n'ai encore vu personne d' autre mentionner : bien qu'il soit bon de renvoyer le même message d' erreur , que le nom d' utilisateur ou le mot de passe soit erroné , il y a une autre considération de sécurité à prendre en compte ici : le temps qu'il faut pour retourner cette erreur. Imaginez que vous êtes un attaquant essayant de forcer brutalement des combinaisons sur un site Web. Tout ce que vous savez, c'est si la combinaison a fonctionné ou non et combien de temps il vous a fallu pour recevoir le message. Si le code de validation ressemble à ceci , vous pouvez trouver plus d' informations que prévu ( les lignes en gras sont celles où un message est imprimé ) : 1 . Vérifier si l'utilisateur existe 2 . * * Si l' utilisateur n'existe pas , imprimer l' erreur * * 3 . Obtenir le mot de passe de l' utilisateur 4 . Comparez le mot de passe de l' utilisateur avec le mot de passe saisi 5 . * * Si les deux mots de passe correspondent , impression réussie * * 6 . * * Sinon, erreur d'impression * * En regardant cette logique, vous pouvez voir que l'erreur causée par un nom d'utilisateur incorrect est imprimée beaucoup plus tôt que l'erreur causée par un mot de passe incorrect. Gardez également à l'esprit que la validation du mot de passe prend beaucoup plus de temps que la simple comparaison de deux noms d'utilisateur (du moment que les mots de passe sont stockés correctement) et prend toujours à peu près le même temps. Pour cette raison, si vous pouvez observer la synchronisation de vos requêtes, vous pouvez alors déterminer, quel que soit le texte du message d'erreur, si le nom d'utilisateur que vous avez saisi existe ou non. C'est ce qu'on appelle une attaque temporelle, et les experts en sécurité recommandent généralement de l'atténuer en effectuant toujours chaque étape de la vérification. Comparez la logique ci - dessus à cette logique , qui n'est pas vulnérable à la même attaque temporelle : 1 . Vérifier si l'utilisateur existe 2 . Si l' utilisateur n'existe pas : 1 . Récupérer la chaîne " doesn'tmatter " de la base de données 3 . Comparez le mot de passe saisi à cette chaîne 2 . * * Erreur d' impression * * 3 . Obtenir le mot de passe de l' utilisateur 4 . Comparez le mot de passe de l' utilisateur avec le mot de passe saisi 5 . * * Si les deux mots de passe correspondent , impression réussie * * 6 . * * Sinon, erreur d'impression * * Si vous n'êtes pas familier avec les bases de données et la façon dont les mots de passe sont stockés, sachez simplement que l'étape 2.1 est nécessaire dans le cas d'une base de données qui met du temps à répondre. Quoi qu'il en soit, dans ce nouveau, nous validons en fait le mot de passe entré par rapport à une chaîne arbitraire dans le cas où le nom d'utilisateur est incorrect, puis nous supprimons le résultat. Pour cette raison, cela devrait toujours prendre le même temps pour obtenir les trois options, laissant un attaquant sans aucune indication sur l'existence ou non d'un utilisateur.