Aller au contenu

Vérifier la sûreté des mots de passe


MS-DOS_1991

Sujets conseillés

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 :unsure:

Quelqu'un pourrait-il m'indiquer comment procéder ? :huh:

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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". :)

Lien vers le commentaire
Partager sur d’autres sites

Excusez-moi mais je ne maitrise pas parfaitement les commandes MySQL... :unsure: 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 dictionnaire
mysql_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 ?

Lien vers le commentaire
Partager sur d’autres sites

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. :)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :lol:

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 !!

Lien vers le commentaire
Partager sur d’autres sites

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é: :hypocrite:

<?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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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é.";
}
?>

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...