|
|
|
|
Bonjour,
Je travaille sur un serveur Debian avec Apache2 et php5.
Je souhaite restreindre l'accès à certaines pages de mon site. Pour cela, il est nécessaire d'authentifier les visiteurs. Je stock dans un fichier texte les logins et password de la facon suivante :
user_name1:user_pwd1
user_name2:user_pwd2
...
les chaines user_pwd correspondent aux mots de passe des utilisateurs. Ils sont obtenus à l'aide de la fonction crypt() de php. (instruction : crypt(mot_de_passe); )
Maintenant je veux réaliser le script qui me permettra d'authentifier les utilisateurs.
Je récupère les infos rentrées par le visiteur grâce à des formulaires. Mon script commence comme ça :
$user=$_POST['pseudo'];
$passwd=crypt($_POST['pass']); //pour ne pas que le mot de passe transit en clair
Mon problème arrive ici, lors de la comparaison de mon $passwd avec la chaine que j'ai stockée dans mon fichier texte.
list($user_from_db, $pass_from_db) = explode(":", $ligne_lecture);
//je récupère dans des variables distinctes le nom d'utilisateur et le mot de passe qui étaient contenus dans //mon fichier texte.
if ($passwd == $pass_from_db) {
echo" mot de passe ok" ;
}
Cette condition me renvoie toujours faux et j'ignore pourquoi :(
Pourriez-vous me donnez un coup de pouce ?
Merci d'avance,
Matthieu
Configuration: Windows Vista Firefox 3.0.6
Hello ! Merci de répondre rapidement :)
|
Pourquoi utilises-tu $GLOBALS(["user_db"]); et non le nom du fichier ?
$fileName="tonfichier";
if (file_exists($fileName)) {
$fichier = fopen($fileName, "r");
while(!feof($fichier)){ // Parcourir le fichier tant qu'il n'est pas fini
$ligne_lecture = fgets($fichier, 4096);
list($user_from_db, $pass_from_db) = explode(":", $ligne_lecture);
echo $user_from_db . ": " . $pass_from_db; //juste pour voir si tout se passe bien. A supprimer après ;-)
if ( ($user_from_db==$user) && ($passwd == $pass_from_db) {
echo" authentification ok"
break;
}
}
fopen($fichier);
}
Teste ce code. Je t'ai mis une ligne "echo" supplémentaire juste pour que tu puisses voir si la lecture est correcte. Google is your friend |
Merci de passer un peu de temps pour moi ;)
<?php
$user=$_POST['pseudo'];
$passwd=crypt($_POST['pass']);
$fileName="/var/www/web/dev/db_user";
if (file_exists($fileName)) {
$fichier = fopen($fileName, "r");
while(!feof($fichier)){ // Parcourir le fichier tant qu'il n'est pas fini
$ligne_lecture = fgets($fichier, 4096);
list($user_from_db, $pass_from_db) = explode(":", $ligne_lecture);
echo $user_from_db . ": " . $pass_from_db; //juste pour voir si tout se passe bien. A supprimer après ;-)
if ( ($user_from_db==$user) && ($passwd == $pass_from_db)) {
echo" authentification ok <br />" ;
}
else echo"<br />echec authentifiaction";
}
fclose($fichier);
}
?>
voici le résultat : titi: $1$w1QgP0Ly$qaIMkyoVy/LgxowRZ/kO/0 echec authentifiaction J'ai vraiment l'impression que le problème se situe au niveau de la fonction crypt() :s |
Bonjour
|
En réalité j'ai d'autres informations après le mot de passe sur la ligne de mon fichier texte. donc le caractère qui suit le mot de passe sera un ":" Aucun problème de ce coté, donc.
|
As-tu lu la doc de la fonction crypt ?
|
Je te conseille d'aller voir dans la doc PHP pour avoir des informations fiables.
|
Crypt() peut utiliser MD5. Mais il peut utiliser d'autre fonctions de chiffrement. http://www.manuelphp.com/php/function.crypt.php
|
J'ai utilisé le nom d'utilisateur comme salt :
$user=$_POST['pseudo']; $passwd=crypt($user,$_POST['pass']); et ceci également lors du stockage du mot de passe dans le fichier texte. Un nouveau problème est apparu : Admettons que le login soit : bibi et le mot de passe : bibi Quand je vais rentrer: - bibi / bibi => OK - bibi / azerty => accès refusé - bibi / bib => OK !!!! (et ca marche meme avec bi, ou bibip ...) |
Tu n'es toujours pas allé lire le mode d'emploi de la fonction crypt ?
|