MS-DOS_1991 Posté 27 Mars 2005 Posté 27 Mars 2005 Bonjour, Je voudrais que mes (futurs) membres s'inscrivent avec des mots de passe sûrs (durs à trouver par une recherche dans un dictionnaire par exemple) Je voudrais donc un script (php) qui ouvre un dictionnaire (dico.txt), puis qui recherche le mot de passe dedans et retourne un message d'erreur si le mot a été trouvé... <?php$passe = $_POST['passe']; // Mot de passe soumis par formulaire$dico = fopen("http://127.0.0.1/dico.txt", "r+"); // Ouverture du Dictionnaire en lecture seule...// Recherche de $passe dans $dico...fclose($dico); // Fermeture du Dictionnaire?> Je précise que mon dictionnaire est écrit avec 1 mot par ligne... A mon avis, il faut faire une boucle for pour lire chaque ligne du fichier Quelqu'un pourrait-il m'indiquer comment procéder ?
-aK- Posté 27 Mars 2005 Posté 27 Mars 2005 Il me semblerait plus simple et moins gourmand de mettre ton dictionnaire dans une table mysql et de faire une simple requête select pour voir si l'enregistrement existe.
Dash Posté 27 Mars 2005 Posté 27 Mars 2005 la surete des mots de passe depend non seulement de la qualite des mots de passe mais egalement dans les methodes de traitement de ces mots de passe. MD5 est un excellent choix pour une application web traditionnelle. Rapide, non-bijective (cad non-reversible). $hash1 = md5($mot_de_passe); // utilisation simple$hash2 = md5(md5($mot_de_passe ) . md5($grain_de_sel)); //utilisation plus complexe La technique du grain de sel (utilisee notamment sur les forums du Hub) est detaillee sur developpez, http://matthieu.developpez.com/authentification/ A ce propos la conclusion de l'article est on ne peut plus pertinente. "la première question à vous poser est : est-ce nécessaire ? [...] soyez assez honnête avec vous même pour apprécier à sa juste valeur votre besoin de protection, et ne pas céder à la tentation d'alourdir votre code pour le transformer en forteresse".
MS-DOS_1991 Posté 27 Mars 2005 Auteur Posté 27 Mars 2005 Excusez-moi mais je ne maitrise pas parfaitement les commandes MySQL... comment puis-je faire une requête pour rechercher le passe dans la table ?? J'ai écrit ceci mais je ne suis pas sûr du tout du fonctionnement: <?php$passe = $_POST['passe']; // Mot à rechercher dans le dictionnairemysql_connect("localhost", "root", ""); // Connection au serveur SQL...mysql_select_db("site_web"); // Connection à la Base MySQL$retour_brut = mysql_query("SELECT * FROM dictionnaire WHERE mot = $passe");$retour = mysql_fetch_array($retour_brut);if($passe == $_retour){echo 'Le mot de passe'. $passe .'a été trouvé: il n'est donc pas sûr...";}else{echo 'Le mot de passe'.$passe .'n\'a pas été trouvé, il est donc relativement sûr';}........$passe_crypte = md5($passe); // Cryptage sécuriséunset($passe); // Suppression des variables inutiles.......Fin de l'inscription.......?> Structure de la table dictionnaire: Champ | Type | Attributs | Défaut | Extra | Action | id | int(11) | Non | | auto_increment | | mot | varchar(255) | Non | | | | Est-ce que vous pourriez m'aider svp ?
Dash Posté 27 Mars 2005 Posté 27 Mars 2005 Pour verifier qu'un mot de passe est "relativement sur" il "suffirait" de verifier - qu'il ne soit pas trop court (nbr de caracteres minimum) (strlen(...) > ... ) - qu'il comporte un melange de minuscules et de majuscules ( strtoupper(...) ?= strtolower(...) ) - qu'il soit constitue d'un melange de chiffres, de lettres et autres caracteres exotiques - ... Pas besoin de dictionnaire pour cela. Ni de SQL.
Developer Posté 27 Mars 2005 Posté 27 Mars 2005 Je vais commenter la requête SQL qui tu as fais: - Utilise plutôt une boucle (while) pour sélectionner tout les champs. - Attention aux ' Mon avis sur tout ça: - Je ne vois pas pourquoi tu veux utiliser ce mode d'enregistrement de mot de passe, si tu veux plus de sécurité et donc ne pas donner aux membres la possibilité de choisir un mot de passe, utilise un simple système qui genère à chaque fois un code diffèrent du genre "998QDQT78TQDF8".. - La 2ème solution consisterai à laisser le choix aux membres et utiliser le "md5".. Developer.
MS-DOS_1991 Posté 27 Mars 2005 Auteur Posté 27 Mars 2005 Pour verifier qu'un mot de passe est "relativement sur" il "suffirait" de verifier - qu'il ne soit pas trop court (nbr de caracteres minimum) (strlen(...) > ... ) - qu'il comporte un melange de minuscules et de majuscules ( strtoupper(...) ?= strtolower(...) ) - qu'il soit constitue d'un melange de chiffres, de lettres et autres caracteres exotiques Salut Dash, Oui, mais je veux aussi éviter que mes membres écrivent ce genre de mots de passe 9&'4(\@{-= chez eux ou sur un petit bout de papier... alors qu'il est plus simple de retenir GaBuzOMeuh
Developer Posté 27 Mars 2005 Posté 27 Mars 2005 Pour ne pas permettre à tes membres d'utiliser les caractères tels que: 9&'4(\@{-= , tu peux utiliser les expressions régulières. C'est beaucoup plus évident que les autres méthodes. Developer.
rottman Posté 28 Mars 2005 Posté 28 Mars 2005 Voilà pour un mot de passe par ligne du fichier texte : <?php $nb_mots = count(file("dico.txt"));$mot = file("dico.txt");$mdp = $_POST["mdp"];for($i=0;$i<$nb_mots;$i++) { if(strpos($mdp,$mot["".$i.""])=="true") { $mauvais = "true"; } }if(!$mauvais) { echo "Votre mot de passe est securisé."; }elseif( $mauvais == "true") { echo "Votre mot de passe n'est pas sécurisé."; }?> De rien !!
MS-DOS_1991 Posté 28 Mars 2005 Auteur Posté 28 Mars 2005 Voilà pour un mot de passe par ligne du fichier texte : <?php $nb_mots = count(file("dico.txt"));$mot = file("dico.txt");$mdp = $_POST["mdp"];for($i=0;$i<$nb_mots;$i++) { if(strpos($mdp,$mot["".$i.""])=="true") { $mauvais = "true"; } }if(!$mauvais) { echo "Votre mot de passe est securisé."; }elseif( $mauvais == "true") { echo "Votre mot de passe n'est pas sécurisé."; }?> De rien !! <{POST_SNAPBACK}> Salut rottman, Désolé mais ton code ne marche pas... Voici celui que j'ai adapté: <?php $nb_mots = count(file("dictionnaire_fr_1.txt"));$mot = file("dictionnaire_fr_1.txt");$passe = $_POST["passe"];for($i=0;$i<$nb_mots;$i++) { if(strpos($passe,$mot["".$i.""])=="true") { @$mauvais = "true"; } }if(!@$mauvais) { echo "Votre mot de passe ($passe) est securisé."; }elseif(@$mauvais == "true") { echo "Votre mot de passe ($passe) n'est pas sécurisé."; }?> Mais ca me met toujours "Votre mot de passe () est sécurisé", même quand il est présent dans le fichier... Merci de m'avoir répondu
rottman Posté 28 Mars 2005 Posté 28 Mars 2005 Essaye : <?php$nb_mots = count(file("dictionnaire_fr_1.txt"));$mot = file("dictionnaire_fr_1.txt");$passe = strtolower($_POST["passe"]);for($i=0;$i<$nb_mots;$i++) { if(strpos($passe,strtolower($mot["".$i.""]))=="true") { $mauvais = "true"; } }if($mauvais!="true") { echo "Votre mot de passe ($passe) est securisé."; }elseif($mauvais == "true") { echo "Votre mot de passe ($passe) n'est pas sécurisé."; }?>
Thanh Posté 29 Mars 2005 Posté 29 Mars 2005 Moi je veux rentrer le mot de passe que je veux, car je le retiens au moins.
david96 Posté 2 Avril 2005 Posté 2 Avril 2005 Pareille, je pense que comme dit Dash MD5 est un excellent choix. Simple et efficace.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant