Question

Je fais quelque chose comme ce qui suit:

SELECT * FROM table WHERE user='$user';
$myrow = fetchRow() // previously I inserted a pass to the db using base64_encode ex: WRM2gt3R=

$somepass = base64_encode(

Je fais quelque chose comme ce qui suit:

<*>

J'obtiens toujours des erreurs, je fais même écho à $ somepass et à $ myrow [1], ils sont identiques, mais ils commettent toujours une erreur. Qu'est-ce que je fais mal? Merci

POST['password']); if($myrow[1] != $somepass) echo 'error'; else echo 'welcome';

J'obtiens toujours des erreurs, je fais même écho à $ somepass et à $ myrow [1], ils sont identiques, mais ils commettent toujours une erreur. Qu'est-ce que je fais mal? Merci

Était-ce utile?

La solution

Essayez d’utiliser var_dump à la place de echo. Peut-être que l’un d’eux aura un espace ou une nouvelle ligne au début / à la fin.

Modifier:

Vous devez le stocker en tant que CHAR (40): Chaîne de longueur fixe toujours remplie à droite avec des espaces à la longueur spécifiée lorsqu'elle est stockée

Utilisez VARCHAR ou trim ()

Autres conseils

Si $ myrow [1] est en fait le mot de passe correct en codage en base64, je ne vois aucune erreur.

Essayez ceci jusqu'à la fin:

echo "<br />$myrow[1] != $somepass";

Que dit-il?

Et au fait: je ne vois aucune raison de coder en base64 les mots de passe. Qu'essayez-vous d'accomplir?

Je pense que si je fais un var_dump (), je reçois:

chaîne (40) "YWRraM2 =" chaîne (8) "YWRraM2 ="

semble que si j'insère les données dans la base de données à l'aide de la console, cela ajoute un espace supplémentaire au champ de passage.

myplacedk: y a-t-il une raison pour laquelle je ne devrais pas le faire? Je pensais que cela ajouterait un indice supplémentaire de sécurité?

Cet encodage fait deux choses:

  1. Cela ajoute du code, ce qui le rend plus complexe et plus facile à commettre des erreurs
  2. Si vous consultez votre base de données sur votre écran et que quelqu'un vous regarde par-dessus votre épaule, les mots de passe risquent d'être un peu plus difficiles à mémoriser.

Donc non, cela n’ajoute pas vraiment de sécurité. C'est juste un encodage, il est facile à décoder.

Peut-être le prenez-vous pour le hachage md5 ou quelque chose comme ça.

Jouer est génial, mais en matière de sécurité, je recommande vivement de ne pas utiliser quelque chose que vous ne comprenez pas. À long terme, cela fera plus de dégâts que de bien.

Quelques problèmes:

  • D'après vos commentaires ailleurs, je suppose que le problème avec le code actuel est que votre champ de base de données est CHAR (40). Un champ CHAR a toujours une taille fixe. Essayez de changer le type de champ de base de données en VARCHAR au lieu de CHAR.

  • Utiliser base64_encode avant de stocker dans une base de données est loin d'être sécurisé. Une bonne pratique consiste à ne stocker qu'un hachage à sens unique du mot de passe dans la base de données - généralement md5 ou (mieux) sha1. Ensuite, lorsque l'utilisateur souhaite se connecter, utilisez la même fonction de hachage sur le mot de passe fourni, puis comparez les deux hachages.
    Cela présente également l’avantage de travailler avec des mots de passe de plus de 40 caractères.
    Un sha1 ou md5-hash prend toujours une quantité d'espace fixe. Par conséquent, si vous choisissez cette voie, vous n'avez pas à passer de la colonne de votre base de données à VARCHAR :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top