8771 sujets
Développement web côté serveur, CMS
Bonsoir dagobert,
À ma connaissance, le plus simple et le plus efficace afin de se protéger contre les attaques de type injection SQL est d'utiliser les requêtes préparées : https://www.php.net/manual/fr/pdo.prepared-statements.php.
Cela permet à ta base de données d'indiquer que les paramètres que tu passes à ta requête sont bien des valeurs et ne doivent pas être interprétées comme du SQL.
À ma connaissance, le plus simple et le plus efficace afin de se protéger contre les attaques de type injection SQL est d'utiliser les requêtes préparées : https://www.php.net/manual/fr/pdo.prepared-statements.php.
Cela permet à ta base de données d'indiquer que les paramètres que tu passes à ta requête sont bien des valeurs et ne doivent pas être interprétées comme du SQL.
<?php
// Exemple de mauvais code :
$req = mysql_query("SELECT * FROM users WHERE username = '" + $username + "';");
// Exemple de code plus sûr :
$db = new PDO(/* arguments de connexion */);
$req = $db->prepare("SELECT * FROM users WHERE username = ':username';");
$req->bindParam(":username", $username);
$res = $req->execute()
?>
Salut,
+1 pour les requêtes préparés.
Et addslashes n'est généralement pas suffisant
Cela peut vaguement protéger tes chaînes de caractères (et encore il me semble qu'il y a certaines attaques qui exploitent des codes en hexadecimal qui ne contiennent donc pas de quotes et passent au travers ta fonction) mais cela ne protège pas les numéros.
Mini exemple du principe qui pourrait se produire :
La même avec un update et tu te retrouves à corrompre toute une table
+1 pour les requêtes préparés.
Et addslashes n'est généralement pas suffisant
Cela peut vaguement protéger tes chaînes de caractères (et encore il me semble qu'il y a certaines attaques qui exploitent des codes en hexadecimal qui ne contiennent donc pas de quotes et passent au travers ta fonction) mais cela ne protège pas les numéros.
Mini exemple du principe qui pourrait se produire :
$toto= 1;
"select * from tatable where toto=".addslashes( $toto );
=> select * from tatable where toto= 1;
$toto = 1 OR 1=1;
"select * from tatable where toto=".addslashes( $toto );
=> select * from tatable where toto= 1 OR 1 = 1 ; //toujours vrai tu obtiens toute la table
La même avec un update et tu te retrouves à corrompre toute une table