Injection sql et sécurité

mayson -  
 mayson -
Bonjour,

j'ai un probléme depuis que j'ai commencé a apprendre php et mysql a chaque fois je trouve une nouvelle methode d'ecrire une requete ,

merci de m'aider a définire sur ma fonction que je vais l'utilisé qur l'ensemble de l'application la quelle des deux est mieux sécurisé :

methode 1 :

$query = "INSERT INTO $this->table_name VALUES (NULL,:ref,:ds,:prixv)";


$stmt = $this->conn->prepare($query);

$stmt->bindParam(':ref', $this->ref);
$stmt->bindParam(':ds', $this->ds);
$stmt->bindParam(':prixv', $this->prixv);

if ($stmt->execute()) {
return true;
} else {
return false;
}
}

methode 2 (je l'es trouvé sur un forum mais elle marche pas pour moi )

$query = "INSERT INTO" . $this->table_name . " VALUES (NULL,:ref,:ds,:prixv)";


$stmt = $this->conn->prepare($query);

$stmt->bindParam(':ref', $this->ref);
$stmt->bindParam(':ds', $this->ds);
$stmt->bindParam(':prixv', $this->prixv);

if ($stmt->execute()) {
return true;
} else {
return false;
}
}


une autre question est ce que c'est obligatoir de précisé PDO::PARAM_STR ou autre PDO:: sur les BindParam et c'est quoi l'intérêt

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Question 1 : Méthode 1 et 2 identiques... tu as du te foirer dans le copier/coller

Question 2 : Paramètre optionnel.. mais il est préférable de l'indiquer
https://www.php.net/manual/fr/pdostatement.bindparam.php



0
mayson
 
Merci encore une fois pour ta réponse par contre sur la methode 2 les VALUE sont entouré de "" j'ai lu sur un forum que ca empéche l'injection des caractères spéciaux
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
La seule différence entre tes deux code c'est les lignes
$query = "INSERT INTO $this->table_name VALUES (NULL,:ref,:ds,:prixv)";

$query = "INSERT INTO" . $this->table_name . " VALUES (NULL,:ref,:ds,:prixv)";

qui, font exactement la même chose....
Il n'y a pas plus de protection dans l'une que dans l'autre.

De toutes façons, en utilisant les requêtes préparées et le bindParam, tu as déjà bien protégé contre l'injection sql.
C'est, d'ailleurs, le but de ce code...

C'est encore mieux si tu utilise le paramètre optionnel qui permet d'indiquer de quel "type" la valeur doit être (comme PDO::PARAM_STR pour les string ..., PDO::PARAM_INT pour les INTEGER .)

Bien entendu, pour sécuriser encore d'avantage, tu peux, avant d'arriver au traitement en bdd, utiliser des REGEX pour vérifier que tes valeurs correspondent bien au format/type que tu souhaites ( pour les adresses mail, les numéro de téléphone, .... mais ça, ce n'est pas PDO qui va le faire. )
0
mayson > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci Beaucoup pour tes réponses , :)

je vais abusé une derniére question bêtesi j'utilise des requêtes préparées ca sert a rien de mettre mysql_real_escape_string ni stripslashes()
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > mayson
 
mysql_real_escape_string : Surtout pas... vu que ce n'est pas du mysqli ... mais de la vielle extension mysql qui est obsolete ( à la limite, tu aurais pu demander pour mysqli_real_escape_string )
Mais de toutes façons, les requêtes préparées gèrent déjà l'escape... donc si tu le fais "en plus"... ça va "doubler"...
Donc non, il ne faut pas l'utiliser.

et non également pour le stripslashes ni de htmlspecialchar ni de htmlentities ou autre joyeusetés de ce genre.
0
mayson > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
ok Merci beaucoup encore une fois j'apprécie beaucoup ton aide
0