Bonjour,
Tout est dans le titre :
Je voudrais savoir si addslashes suffit pour se prémunir de toute injection SQL.
Merci![]()
Bonjour,
Tout est dans le titre :
Je voudrais savoir si addslashes suffit pour se prémunir de toute injection SQL.
Merci![]()
http://www.php.net/manual/fr/function.mysql-real-escape-string.php
Regarde justement le chapitre sur les injections SQL
J'ajouterais strip_tags() !
Thanks.
Je vais de suite implémenter le quote_smart.
Sinon je pense que strip_tags est plus adapté à Cross Scripting qu'aux injections SQL non ?
non, addslashes ne suffit pas.
Tout depend en fait de ta base de données... si tu as une version de MySQL < 4, alors addslashes devrait suffire... mais si tu as une version superieure ou alors que tu as PostGres ou SQL Server, il te faut verifier que tes champs ne contiennent pas d'autres caracteres "spéciaux".
Par exemple le caractere ;
ou encore "UNION"
en fait, il faut que tu verifie le type de la variable.
Quand tu construit une requete, tu fait en général :
quand le champ est une chaine
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... champ = '$var' ...
et
quand le champ est un nombre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... champ = $var ...
Pour le 1er cas, addslashes suffit.
Pour le second, il faut que tu verifie que le champ est bien un nombre (avec is_numeric par exemple) ou encore que tu le "force" en nombre (avec $var+=0; par exemple) sinon tu t'expose aux attaques par ; et UNION.
Exemples :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $var = "3; DROP TABLE user;" SELECT * FROM table WHERE ID = $var donne : SELECT * FROM table WHERE ID = 3; DROP TABLE user;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $var = "3 UNION SELECT password FROM user WHERE id=1"; SELECT champ FROM table WHERE ID = $var donne : SELECT champ FROM table WHERE ID = 3 UNION SELECT password FROM user WHERE id=1
Merci pour cette explication qui me montre que le addslashes n'est pas suffisant.
Mais si je fais tout le temps :
Aïeuuu... tapez pas ! je sais que je compare des choux et des carottes, ici une colonne de type int et un varchar, mais ca résoud très grandement ces ; et autre UNION...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... WHERE id = '$id'...
![]()
Un peu naze je trouve perso les sgbd qui gèrent les multi requètes avec ; c'est une porte ouverte a des tas de failles de sécurité d'injection sql de leur part.
Testez le forum Fire Soft Board, un forum libre, gratuit et français.
Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.
Tu peut ajouter ces tests la:
avec addslashes( )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 htmlspecialchars( ) stripslashes( )
ou faire des tests plus cible comme:
cf php.net pour les precisions ou tuto sur sql injection
Code : Sélectionner tout - Visualiser dans une fenêtre à part isnumeric( ), ....
bon dev'
note: htmlspecialchars( ) ne sert pas vraiment à empecher l'injection sql (enfin je crois pas) c'est plutot pour les accents et les caracteres speciaux du meme genre. Mais c'est un bonus.
Le monde se divise en deux: ceux qui utilisent le taget les autres.
A propos de htmlspecialchars, quel est le lien avec SQL (et dans mon cas MySQL) ?
htmlspecialchars() remplace ' par son équivalent HTML si tu lui passe un flag particulier je crois, c'est le seul rapport que je vois.
Dans tous les cas mysql_real_escape_string() est la meilleur fonction pour protéger tes requètes.
Il existe une denrièere (et parfaite) solution : la préparation de requète. Je sais que mysqli gère ca donc si tu as MySQL 4.1 installe l'extension MySQLi
Testez le forum Fire Soft Board, un forum libre, gratuit et français.
Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.
Ok merci à tous![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager