Disons que tu as correctement compris les bases fondamentales. Et en fin de compte ça signifie quoi : qu'il faut être strict lorsqu'on développe et qu'avec un formulaire on ouvre une porte à l'utilisateur. Mais on ne connait pas forcément ce dernier, on ne sais même en général même pas qui il est. On doit donc filtrer sévèrement les données qu'il envoie de façon à ce que rien d'imprévu ne se produise, et donc que rien dans les données qu'il envoie ne puisse être interprété comme du code exécutable par le système.
Tu disais «
Je pense que je viens de dire a tout le monde comment faire une injection SQL » mais ce n'est pas un soucis, au contraire, dans la mesure où on est capable d'anticiper les actions possibles avec le code dans l'état où il se trouve. ça signifie qu'on comprend bien le déroulement de l'exécution du programme et comment sont traitées les données. Le risque d'effacement de données voire de tables complètes suppose qu'on est capable de s'identifier comme admin ou encore qu'on peut envoyer du code SQL dans un formulaire d'identification. L'anticipation du développeur lui permet de voir comment transformer une requête normale en requête de destruction et, ce faisant, comment s'en prémunir en filtrant les données reçues.
Exemple : tentative d'identification comme admin : au lieu d'envoyer par exemple l'identifiant « admin » dans le champ Login du formulaire, je mets « admin' OR '1' = '1 », que va-t-il se passer à l'exécution ?
Ma requête d'identification normale sera par exemple :
$login = $_POST['login'];
$password = $_POST['password'];
$sql = "SELECT COUNT(*) FROM users WHERE login = '". $login ."' AND password = '". $password ."'";
La requête qui sera envoyé vers la base sera :
SELECT COUNT(*) FROM users WHERE login = 'admin' OR '1' = '1' AND password = 'abcd1234'
Ça va donner quoi si on ne protège par le code contre ça à ton avis ??
Et donc comment sécuriser ce code ?
Disons que tu as correctement compris les bases fondamentales. Et en fin de compte ça signifie quoi : qu'il faut être strict lorsqu'on développe et qu'avec un formulaire on ouvre une porte à l'utilisateur. Mais on ne connait pas forcément ce dernier, on ne sais même en général même pas qui il est. On doit donc filtrer sévèrement les données qu'il envoie de façon à ce que rien d'imprévu ne se produise, et donc que rien dans les données qu'il envoie ne puisse être interprété comme du code exécutable par le système.
Tu disais « [i]Je pense que je viens de dire a tout le monde comment faire une injection SQL[/i] » mais ce n'est pas un soucis, au contraire, dans la mesure où on est capable d'anticiper les actions possibles avec le code dans l'état où il se trouve. ça signifie qu'on comprend bien le déroulement de l'exécution du programme et comment sont traitées les données. Le risque d'effacement de données voire de tables complètes suppose qu'on est capable de s'identifier comme admin ou encore qu'on peut envoyer du code SQL dans un formulaire d'identification. L'anticipation du développeur lui permet de voir comment transformer une requête normale en requête de destruction et, ce faisant, comment s'en prémunir en filtrant les données reçues.
Exemple : tentative d'identification comme admin : au lieu d'envoyer par exemple l'identifiant « admin » dans le champ Login du formulaire, je mets « admin' OR '1' = '1 », que va-t-il se passer à l'exécution ?
Ma requête d'identification normale sera par exemple :
[php]$login = $_POST['login'];
$password = $_POST['password'];
$sql = "SELECT COUNT(*) FROM users WHERE login = '". $login ."' AND password = '". $password ."'";[/php]
La requête qui sera envoyé vers la base sera :
[sql]SELECT COUNT(*) FROM users WHERE login = 'admin' OR '1' = '1' AND password = 'abcd1234'[/sql]
Ça va donner quoi si on ne protège par le code contre ça à ton avis ??
Et donc comment sécuriser ce code ?