PHP et sql injection

PHP et sql injection - PHP - Programmation

Marsh Posté le 30-08-2016 à 22:31:59    

Bonsoir à tous,
 
J'ai une page PHP à la quelle je passe un paramètre à l'url. Je récupère ce paramètre pour une requête sql
 
http://www.monsite.com/page.php?parametre=5
 
<?php
//J'ai pensé à protéger mon paramètre en faisant
$parametre=mysql_real_escape_string($_GET['parametre']);
//Puis je fais ma requete
$sql="SELECT * FROM table where id=$parametre;";
//(...)
 
?>
 
Mais il semble que mysql_real_escape_string ne soit pas suffisant pour protéger des "sql injection" (on m'a fait la démo avec sqlmap ; le mec arrivait à lister (parce qu'il est sympa) tout le contenu de mes bases de données :|).
 
Que pourrais-je faire de plus pour éviter ça ?
 
Merci :)


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Marsh Posté le 30-08-2016 à 22:31:59   

Reply

Marsh Posté le 30-08-2016 à 22:57:15    

Idéalement, passer par PDO pour passer tes requêtes.

Reply

Marsh Posté le 31-08-2016 à 09:33:26    

Quand tu attend un id numérique le plus simple c'est de faire un intval()


---------------
D3
Reply

Marsh Posté le 31-08-2016 à 14:57:47    

Oui ce n'est pas suffisant, j'opterais aussi pour un intval dans ce cas précis. sinon les bibliothèque de nettoyage c'est aussi très bien. Mais de manière générale en sécurité il n'y a pas mieux que de savoir exactement ce que tu attends en entrée et les renseignements que tu donne en sortie

Reply

Marsh Posté le 31-08-2016 à 20:24:17    

quand il s'agit d'un entier, c'est effectivement facile... c'est surtout pour les chaîne de caractère qu'il faut être vigilant et à ma connaissance, le mieux c'est le PDO...

Reply

Marsh Posté le 06-09-2016 à 17:25:47    

zezette a écrit :

Bonsoir à tous,
 
J'ai une page PHP à la quelle je passe un paramètre à l'url. Je récupère ce paramètre pour une requête sql
 
http://www.monsite.com/page.php?parametre=5
 
<?php
//J'ai pensé à protéger mon paramètre en faisant
$parametre=mysql_real_escape_string($_GET['parametre']);
//Puis je fais ma requete
$sql="SELECT * FROM table where id=$parametre;";
//(...)
 
?>
 
Mais il semble que mysql_real_escape_string ne soit pas suffisant pour protéger des "sql injection" (on m'a fait la démo avec sqlmap ; le mec arrivait à lister (parce qu'il est sympa) tout le contenu de mes bases de données :|).
 
Que pourrais-je faire de plus pour éviter ça ?
 
Merci :)


 
Avertissement : j'y connais rien au PHP.
 
Il ne manquerait pas les "quotes" autour de $parametre ?
 

Code :
  1. $sql="SELECT * FROM table where id='$parametre';";


 
Sinon je fais http://www.monsite.com/page.php?pa [...] ABLE+table et ça injecte.

Reply

Marsh Posté le 06-09-2016 à 17:55:44    

Pas obligatoire quand la variable est entre double quotes

Reply

Marsh Posté le 06-09-2016 à 19:04:33    

antac a écrit :

quand il s'agit d'un entier, c'est effectivement facile... c'est surtout pour les chaîne de caractère qu'il faut être vigilant et à ma connaissance, le mieux c'est le PDO...


 
En même temps, mise à part pour des messages, tu t'attends en général à du ^[a-Z0-9]{1,12}$, ce n'est probablement pas conseillé niveau perf mais un regex peut faire l'affaire. Et dans des cas plus spéciaux (coordonnées, adresse mail, numéro de tel, etc.) il est tout aussi facile de trouver un regex qui fera le taf.
 
Mais bon, comme dit, pourquoi s'emmerder quand on peut utiliser PDO.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed