Injection sql et sécurité
mayson
-
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
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
A voir également:
- Injection sql et sécurité
- Question de sécurité - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Mode securite - Guide
- Clé de sécurité windows 10 gratuit - Guide
- Restriction de sécurité : veuillez réessayer à partir de cet appareil dans 72 heures - Forum Snapchat
2 réponses
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
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
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
La seule différence entre tes deux code c'est les lignes
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. )
$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. )
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.
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.