Injection sql et sécurité

Fermé
mayson - 18 mai 2020 à 04:15
 mayson - 21 mai 2020 à 22:44
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 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658
Modifié le 18 mai 2020 à 08:10
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
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 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658
20 mai 2020 à 12:09
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 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024
20 mai 2020 à 22:55
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 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658 > mayson
20 mai 2020 à 23:03
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 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024
21 mai 2020 à 22:44
ok Merci beaucoup encore une fois j'apprécie beaucoup ton aide
0