Help pour php/mysql => crypter mot de passe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Help pour php/mysql => crypter mot de passe

par Bast » 18 oct. 2006, 15:27

Mouais enfin pour être plus clair : tu as le choix de crypter avec une fonction SQL ou bien une fonction php.

Mais dans les 2 cas, il faut crypter la proposition de mot de passe pour le comparer avec le mot2passe stocké dans le BDD, et qui lui est déjà crypté.

C'est pourquoi je ne comprends pas ton eureka... ce n'est pas md5 qui a résolu ton pb, mais bien le nb de caractères acceptés par ta colonne mot2passe. Tu aurais donc pu conserver PASSWORD().

par Bast » 18 oct. 2006, 15:23

Oui mais tu avais utilisé le cryptage par PASSWORD() au niveau de la base de donnée !

Et là d'un coup tu te mets à utiliser md5() ? (qui lui se fait du côté php).


HS : plutot que md5, je te conseille sha1

par billy1377 » 24 sept. 2006, 16:52

EUREKA !!! :P

Alors le problème : la page index.php (ci-dessus) me renvoyait soit sur une feuille blanche soit sur vous n'avez pas accés !

Il s'est avéré que la syntaxe était bonne (vaut mieux le faire sur le POST ;) que sur SESSION
$password = md5$_POST['mot2passe']

Donc mon problème était lié à la structure de ma base et plus particulièrement de ma table utilisateur et plus précisement à la colonne mot2passe ! En effet elle était sur 12 caractères et le md5 code sur 32....

Merci pour vos conseils.

par billy1377 » 19 sept. 2006, 19:56

:cry: :cry: :cry: :cry:

ça ne marche toujours pas.

Que ce soit un compte avec un mot de passe crypté (ou non car j'ai aussi des comptes avec des mots de passe en clair dans la base), le résultat est le même.... vous n'êtes pas autorisé à vous connecter (autorisation.htm) pourtant je tape le bon login/pass.

par zeus » 19 sept. 2006, 19:31

Est-ce que tu as essayé ? :?

Selon moi, ce code devrait fonctionner ... mais il n'y a que l'essai qui nous le dira ;)

par billy1377 » 19 sept. 2006, 18:48

Donc si je t'ai compris ça donne ça ?

Je suis pas très doué en matière de développement :?
<? 
session_start(); 
  
include("connection.php");  
  
if($_POST){  
  $_SESSION['Identifiant']=$_POST["Identifiant"];  
  $_SESSION['Mot2passe']=$_POST["Mot2passe"];    
}  
  
$Identifiant = $_POST['Identifiant']; 
  
session_regenerate_id (); 
  
$_SESSION['Identifiant'] = $Identifiant; 
  
$res =mysql_query("select Securite from utilisateurs 
     where Identifiant='" . $_SESSION['Identifiant'] . "' and Mot2passe=PASSWORD('" . $_SESSION['Mot2passe'] . "')"); 
  
$ligne = mysql_fetch_row($res); 
  
switch ($ligne[0]) { 
case 1: 
    Include("Menu1.php");  
    break; 
case 2: 
    Include("Menu2.php");  
    break; 
 } 
  

$num=mysql_num_rows($res);  
  
if($num < 1){  
   
 include("autorisation.htm");  
    
  exit;  
}  
?>

par zeus » 19 sept. 2006, 18:01

C'est normal ;)

Dans ton code, tu as 2 requetes sur l'id et pass. Une qui retourne le champs Securite et l'autre *.

Comme c'est le résultat de la 2nd qui conditionne le header sur autorisation.htm et que c'est sur la 1ere que tu fait le cryptage ...

Personnellement, je pense qu'il y a une requete en trop ;)

par billy1377 » 19 sept. 2006, 17:22

Ce qui ne marche pas, c'est le cryptage dans la requête du mot de passe enfin je m'exprime mal.

Le mot de passe est crypté dans la base (voir dans le 1er post) par un INSERT ... PASSWORD('motdepasse')...

Je voudrai que dans ma requête (formulaire) il vérifie ce mot de passe et là le problème c'est qu'il est crypté d'un côté (côté base de données) et côté page (formulaire) il ne l'est pas donc forcemment il me renvoie une erreur qu'il y a un échec....

J'ai essayé cette syntaxe de phrase (ci-dessous) mais ça ne fonctionne pas, il me renvoie à un échec d'authentification (il m'envoie vers ma page authentification.htm => mauvais login / mot de passe)

$res =mysql_query("select Securite from utilisateurs

where Identifiant='" . $_SESSION['Identifiant'] . "' and Mot2passe=PASSWORD('" . $_SESSION['Mot2passe'] . "')");


Quant au débugage, je ne sais comment faire, je suis pas un développeur :?

par graphistnet » 19 sept. 2006, 17:16

Qu'est ce qui ne fonctionne pas?
As tu effectué les tests de débogage d'usage en affichant les différentes variables ainsi que la requête?

par billy1377 » 19 sept. 2006, 17:08

Ca marche pas :cry:
il me renvoie vers la page "vous n'êtes pas autorisé..." (autorisation.htm).

Vous auriez pas une idée :?:

Merci d'avance.

par zeus » 19 sept. 2006, 08:44

Dans l'idée, tu as énormément avancé, il ne te manque que la dernière marche ;)

Tu as bien saisi qu'il fallait crypter le mot de passe dans la base de données. Tu es donc d'accord que c'est la valeur cryptée qui est en base de données ?

Donc, lors de la vérification de la connexion, il faut que tu compares cette valeur cryptés au résultat du cryptage du pass saisie
$res =mysql_query("select Securite from utilisateurs
     where Identifiant='" . $_SESSION['Identifiant'] . "' and Mot2passe=PASSWORD('" . $_SESSION['Mot2passe'] . "')");

Help pour php/mysql => crypter mot de passe

par billy007 » 19 sept. 2006, 08:33

Bonjour,

je développe (je suis un développeur du dimanche) depuis peu en php avec accés dans une base mysql (mes pages sont hébergées chez un fai que je ne citerai pas pour ne pas lui faire de la pub)... bref.

La finalité de mon application est d'avoir accés en ligne à mon carnet d'adresses (nom, adresse, email...etc..) et pour accéder à tout celà on s'authentifie.

J'ai donc 2 tables dans ma base (qui ne sont pas liées par des relations d'aprobation) et il n'y a aucun clé primaire (aucun besoin).

Une table qui va contenir le carnet d'adresses (avec les champs énumérés ci-dessus) et une autre table qui va contenir l'identifiant des utilisateurs, leur mot de passe (jusque là en clair) sans oublier le niveau de sécurité (2 niveaux : niveau 1 = utilisateur en lecture seule // niveau 2 = administrateur)

Voici mon problème :oops:
Je suis allé sous la base mysql (en commande sql) et j'ai crypté dans ma table utlisateurs (identifiant, mot de passe, niveau de sécurité) le mot de passe d'un de mes utilisateurs (à titre d'exemple)

ma requête sous mysql est la suivante :
INSERT INTO users (Identifiant,Mot2passe,Securite) VALUES('tartampion',PASSWORD('toto'),'1')

Le mot de passe est crypté :!:

Ensuite, j'essaie d'accéder par mes pages php avec le compte tartampion (dont le mot de passe vient d'être crée et crypté) mais ça ne passe pas car forcemment je lui ai pas dit de crypter dans le formulaire enfin si j'ai essayé mais mauvaise syntaxe ou mauvaise connaissance de php alors j'ai enlevé et je vous demande de l'aide pour que lorsque l'utilisateur s'authentifie (dans ma page ci-dessous), le mot de passe soit envoyé crypté.

J'aimerai crypter mes mots de passe dans ma table car des mots de passe en clair, ça le faisait pas.

La page suivante sert à authentifier déjà l'utilisateur (à partir d'un formulaire) dans la base puis à voir le niveau de sécurité de l'utlisateur (admin ou utilisateur) et c'est dans cette page qu'il faudra que je lui dise de crypter le mot de passe envoyé par l'utlisateur.

Ma page contient le code suivant :
<?
session_start();
 
include("connection.php"); 
 
if($_POST){ 
  $_SESSION['Identifiant']=$_POST["Identifiant"]; 
  $_SESSION['Mot2passe']=$_POST["Mot2passe"];   
} 
 
$Identifiant = $_POST['Identifiant'];
 
session_regenerate_id ();
 
$_SESSION['Identifiant'] = $Identifiant;
 
$res =mysql_query("select Securite from utilisateurs
     where Identifiant='" . $_SESSION['Identifiant'] . "' and Mot2passe='" . $_SESSION['Mot2passe'] . "'");
 
$ligne = mysql_fetch_row($res);
 
switch ($ligne[0]) {
case 1:
    Include("Menu1.php"); 
    break;
case 2:
    Include("Menu2.php"); 
    break;
 }
 

// requête pour l'identifiant et mot de passe
$result=mysql_query("select * from utilisateurs 
  where Identifiant='" . $_SESSION['Identifiant'] . "' and Mot2passe='" . $_SESSION['Mot2passe'] . "'"); 
 

$num=mysql_num_rows($result); 
 
if($num < 1){ 
  
 include("autorisation.htm"); 
   
  exit; 
} 
?>
Merci d'avance pour votre aide. :roll: