equivalence mysql_escape_string en PDO

equivalence mysql_escape_string en PDO - PHP - Programmation

Marsh Posté le 09-03-2015 à 21:50:03    

Bonjour à tous.    
 
Mes compétences informatique sont presque inexistante en PHP comme quasiment partout ailleurs dans le langage informatique. :(  
 
Je me suis balader de forum en forum pour essayer d'aboutir à Un objectif qui ne marche plus avec Mysql  5.6.17 pou la quel je vous en pris de m'aider.
J'aimerais s'il vous plait, trouver l'eqivalence cet petit bloque de code en PDO.
 
 
        $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
        if ($data[0] == 0) {
       $sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string(md5($_POST['pass'])).'" )';
       mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
 
Merci beaucoup

Reply

Marsh Posté le 09-03-2015 à 21:50:03   

Reply

Marsh Posté le 09-03-2015 à 22:23:09    

L'équivalent c'est de surtout pas faire ton escaping à la main (en notant que t'es censé utiliser mysql_real_escape_string quand tu fais ça).
 
La manière correcte de le faire en PDO c'est

Code :
  1. $query = $conn->prepare("SELECT count(*) FROM member WHERE login=?" );
  2. $query->execute(array($_POST['login']));
  3. $data = $query->fetchAll();


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-03-2015 à 22:31:39    

Ouch
 
Regarde de ce côté : http://php.net/manual/fr/pdo.prepare.php
 
Ca va donner un truc du genre. Pas dit que ca marche j'utilise plus directement pdo depuis longtemps
 

Code :
  1. $bdd = new PDO(blablabla); // connexion
  2. $login = $_POST['login'];
  3. $pass = md5($_POST['pass']);
  4. $req = $bdd->prepare('count(*) FROM membre WHERE login=?');
  5. $req->execute(array($login));
  6. if ( 0 == $req->rowCount() ) { 
  7. $req2 = $bdd->prepare('INSERT INTO membre(login,pass) VALUES(?,?)'); //
  8. $req2->execute(array($login,$pass));
  9. ....
  10. }


 
 
Utiliser du MD5 en 2015 faut oser. password_hash() et bcrypt c'est tout aussi simple à utiliser.
 
edit : grillé


Message édité par scvo0ne le 09-03-2015 à 22:32:28
Reply

Marsh Posté le 16-03-2015 à 20:19:36    

Bonjour à tous
Avant tout je vous pris m'excuse pour mon absence et mes remerciment a tous ceux qui ont participé a ma question. Mais je pense que je vais me remettre à la théorie, parce que je le sentiment que on peut pas comparer avec PDO la ligne complete de la bd et il faut savoir que MD5 va cripter différemment un même mot passe pour deux login différents.
Je reviendrait posté la solution. merci
   
 

Reply

Marsh Posté le 16-03-2015 à 20:40:15    

MD5 n'est plus considéré comme sûr pour les mots de passe. Point barre.
 
Tu peux ajouter le login au mot de passe, le saler, faire ce que tu veux... dis toi qu'une carte graphique actuelle peut tester un voire plusieurs milliards de hashs par seconde. Entre ca, les rainbow tables et les attaques par dictionnaire, soit tu t'estimes expert et tu bricoles une solution "robuste" basée sur MD5, soit tu as l'humilité de lire des docs et d'appliquer les best-practices du moment.
 
 
 
 
 

Reply

Marsh Posté le 16-03-2015 à 20:45:13    

scvo0ne a écrit :

MD5 n'est plus considéré comme sûr pour les mots de passe.


md5 n'a jamais été considéré comme sûr pour les mots de passe [:aloy] md5crypt a été crée en 1994


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-03-2015 à 20:49:45    

La plus belle fille ne peut donner plus que ce elle as. Je suis loin d'être un expert, seule utilise ce que j'ai appris, mais en informatique il faut pas dormir, parce que ce de hier est déjà révolu pour une nouveauté.
Merci por tes conseils.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed