8797 sujets

Développement web côté serveur, CMS

Bonjour,

J’ai créé un formulaire d’inscription avec la fonction MD5 pour les mots de passe (stockage dans une base de donnee mysql) :
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
 $insertSQL = sprintf("INSERT INTO clients (ID, nom, prenom, adresse, ville, cp, tel, email, pass) 
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, MD5(%s))",
 GetSQLValueString($_POST['ID'], "int"),
 GetSQLValueString($_POST['nom'], "text"),
 GetSQLValueString($_POST['prenom'], "text"),
 GetSQLValueString($_POST['adresse'], "text"),
 GetSQLValueString($_POST['ville'], "text"),
 GetSQLValueString($_POST['cp'], "text"),
 GetSQLValueString($_POST['tel'], "text"),
 GetSQLValueString($_POST['email'], "text"),
 GetSQLValueString($_POST['pass'], "text"));

Le mots de passe est bien enregistré haché dans ma base de donnée
Mais je ne comprends pas pourquoi je n'arrive pas à inserer la fonction MD5 dans cette page d'identification du client.
Si j'enleve MD5 j'arrive à me connecter avec un mots de passe non ashé mais des que je l'ajoute, ma page se comporte
comme si le mots de passe était incorrect. Smiley sweatdrop

merci d'avance
Smiley smile
<?php require_once('../Connections/ConnexionMa.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

 switch ($theType) {
 case "text":
 $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
 break; 
 case "long":
 case "int":
 $theValue = ($theValue != "") ? intval($theValue) : "NULL";
 break;
 case "double":
 $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
 break;
 case "date":
 $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
 break;
 case "defined":
 $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
 break;
 }
 return $theValue;
}
}
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
 session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
 $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['email'])) {
 $loginUsername=$_POST['email'];
 $password=$_POST['pass'];
 $MM_fldUserAuthorization = "";
 $MM_redirectLoginSuccess = "../moi/commande_confirmation.php";
 $MM_redirectLoginFailed = "login.php";
 $MM_redirecttoReferrer = true;
 mysql_select_db($database_ConnexionMa, $ConnexionMa);
 
 $LoginRS__query=sprintf("SELECT email, pass FROM 
clients WHERE email=%s AND [#red]pass=MD5(%s)",[/#] 
 GetSQLValueString($loginUsername, "text"), 
GetSQLValueString($password, "text")); 
 
 $LoginRS = mysql_query($LoginRS__query, $ConnexionMa) or die(mysql_error());
 $loginFoundUser = mysql_num_rows($LoginRS);
 if ($loginFoundUser) {
 $loginStrGroup = "";
 
 //declare two session variables and assign them
 $_SESSION['MM_Username'] = $loginUsername;
 $_SESSION['MM_UserGroup'] = $loginStrGroup;	 

 if (isset($_SESSION['PrevUrl']) && true) {
 $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];	
 }
 header("Location: " . $MM_redirectLoginSuccess );
 }
 else {
 header("Location: ". $MM_redirectLoginFailed );
 }
}
?>
<html
<head>

</head>
<body>
<form name="form1" method="POST" action="<?php echo $loginFormAction; ?>">
 <input name="email" type="text" id="email" size="17">
 <br>
 <input name="pass" type="password" id="pass" size="17"/> 
  <input type="submit" name="button" id="button" value="ok">
 </form>
 </body>

Modifié par fanny742 (14 Mar 2008 - 11:09)
! zut je relis car j'ai l'imp de mettre gouré.

ça se confirme je mettais trompé. bon pour l'instant je tilte pas.

une question a tout hazard as tu mis suffisemment de caracteres au champ login pour entrer un md5? contrairement au login normal il n'est pas de 8-10 caracteres mais de plusieurs dizaines.

je doute aussi que ce soit cela mais la fct GetSQLValueString (tiens j'ai l'impression de savoir quel editeur tu utilises) avec son mysql_real_escape_string pour le coup te modifiera des données si jamais quelqu'un choisi des caracteres spéciaux pour son pass.
Modifié par CPascal (12 Mar 2008 - 20:58)
la boulette,

je n'avais pas mis 32 caracteres pour le champs pass de ma base de donnée. Je viens de faire des tests , ca marche merci beaucoup, tu m'as sortie d'une saccré galere, j'aurais pu chercher longtemps. Smiley biggrin
Les erreurs les plus difficile sont souvent les plus betes, malheureusement !

Je ne comprends pas, J’utilise le comportement connecter l’utilisateur de dreamweaver cs3, mais lorsque j'ajoute la fonction MD5 à ma page d'identification, dreamweaver me cree un deuxieme comportement connecter l'utilisateur.
Et comment est ce que je peux resoudre le probleme des caracteres speciaux pour le pass STP?

fanny
tu sais les comportements dans dreamweaver ce n'est pas essentiel.

je sais tous ce qu'ils peuvent apporter comme "confort" mais on ne devient programmeur operationnel que quand on arrive a s'en passer. on arrive vite a se trouver enfermer si on veux provoquer leur apparition.

cependant le probleme des caracteres spéciaux n'est peut-être pas si important seul quelques caracteres assez rares dans les mdp sont concernés.

et la solution est simple :ecrire soit-même un code simple.

non ce qui m'embete plus c'est que tu sais un md5 tous simple c'est bof bof niveau sécurité.

une reflexion est celle-ci il faut rajouter un element graine/seed connu de toi seul au mot de passe afin de le rendre plus resistant au crackage par force brute.

MD5 crypte d'une unique façon toute phrase quelque soit la date quelque soit la machine, le systeme. et des logiciels qui ont la liste des transcriptions des mdp "habituels" arrivent a recuperer trés vite un mot de passe facile. si le mdp est toto , tintin , ou etoilesdesneiges c'est mort d'entré je pense Smiley cligne

sinon c'est plus complexe a mettre en place mais cherche du coté cryptage et XOR. si tu sais ce qu'est un XOR tu comprendras peut-etre comment renforcer la sécurité.
Modifié par CPascal (12 Mar 2008 - 23:07)
Salut Smiley cligne

Comme le dis CPascal, un simple hashage n'est peut être pas suffisant (quoi que, cela dépend qu'est ce que tu vas faire avec les mots de passe : consultation de compte en banque, ou profil de forum ?)

Après, tu faire plusieurs hachage, efficace et simple, tu hache une première fois en md5 puis en SHA ou l'inverse. Ca mettra déjà KO quelque forcebrut.

Après, tu peux comme le dis CPascal, et c'est ce qui est utilisé par exemple pour protéger le mot de passe contenu dans les cookie de punbb, un seed, une clé que tu connais, qui associé au MD5 et sérialisé et beaucoup plus dur à casser.

Après, sécurité maximum, il faudras pouvoir hacher le mot de passe avant l'envoie des donnée (traiter avec le Javascript). Car les données envoyer en méthode POST/GET sont envoyé en clair d'une page à une autre, et donc "possibilité" d'intercepter le mot de passe avant hashage.

Enfin, il faut vraiment savoir ce dont tu as besoin comme niveau de sécurité avant d'envisager quelques chose de trop complexe pour pas grand chose Smiley cligne
merci pour vos conseils,

je vais ajouter GDS ou les deux fonction md5 et sha, je ne connais pas XOR. Mon probleme est l'utilisation d'une version anterieur par mon hebergeur php4, 4.1mysql. Je developpe un site de commerce, si vous avez des tutos je suis prenante.
Maintenant que mes mots de passe sont haches comment faire si le mots de passe est perdu par le client ?

merci Smiley cligne
fanny
Salut Fanny,

En fait, le fonctionnement pour les mots de passe hashés.

Inscription :

- Entrée dans un formulaire du client de son mot de passe (si possible hachage du mot de passe en javascript, sinon traitement serveur).
- Mot de passe hashé en base de donnée.

Identification :

- Entrée du mot de passe par le client
- hashage du mot de passe entrée par le client, et comparaison avec le contenu de la base, si identique OK, sinon refus.

Mot de passe perdu :

- Une seule solution, recréer un mot de passe aléatoire, que tu enverras en clair par mail à la personne qui en fait la demande, et tu envoie le mot de passe aléatoire haché en base de donnée.
Maintenant que mes mots de passe sont haches comment faire si le mots de passe est perdu par le client ?

si il y a un md5 dans l'affaire ça va etre dur. Conseil fortement as tes clients de pas les perdre. et sic... je suis bien placé pour savoir que ça arrive. propose un service pour que tes clients puissent avoir un nouveau mdp. genre vous avez oubliez votre mdp, cliquez ici.

mais si j'ai un conseil ne demandes pas a tes clients de t'envoyer les données numeriques de leur carte credit par mail comme preuve.
je dis ça tous recemment je suis tombé sur le cas. je peux te dire que ces gens on perdu ma clientele. des n° de CB sur mail! ils sont fou. surtout que je n'avais jamais payé par CB avec eux.
Modifié par CPascal (14 Mar 2008 - 11:22)
je veux proposer un service "vous avez oubliez votre mdp, cliquez ici" qui envoi un nouveau mot de passe au client par mail. Le mot de passe serait créer avec un generateur de mots de passe, transmission du nouveau MDP au client et enregistrement dans ma bdd crypté.
Je ne demanderai pas d'information perso comme le n° de carte de bleu du client, aucun stockage de ce genre ne se ferra sur ma bdd.

Avez vous un script ou un tuto pour m'aider à generer un nouveau mot de passe ?

merci

fanny
si tu fais un site de commerce tu as quand même besoin d'un minimum d'info. une adresse mail minimum et c'est a cette adresse que tu envoies plus une eventuelle question rappel.

pour générer un mot de passe aléatoire de 8 chiffre et ben tu dois pouvoir te servir de la fonction rand en php. et d'un tableau contenant la liste des caracteres authorisés. chaque lettre du mdp étant tiré aléatoirement dans le tableau. bon evidemment c'est la version simple sans fioriture.
Modifié par CPascal (14 Mar 2008 - 13:13)