Du coté PHP

Information sur l'article

Ecrit par phpSources
Date d'enregistrement de l'article le 11 Déc 2008
Impression: Imprimer l'article
Pas encore
de vote
 

Se protéger des injections SQL


Lors de l'interrogation de votre base de données, évitez que les données douteuses rendent votre application vulnérable aux injections SQL et donc peu fiable. Certains programmeurs pensent qu'ils ont résolu le problème en utilisant des magic_quotes dans leur php.ini. Le problème est que les entrées douteuses peuvent provenir de sources autres que $ _GET, $ _POST et $ _COOKIE (provenant d'autres sites ou utilisant des entrées de la base de données). Et que se passe-t'il si soudainement magic_quotes est réglé sur OFF?

Comment faire pour résoudre ce problème:
Il faut mettre les magic_quotes sur OFF dans le fichier php.ini ou bien utiliser le fichier .htaccess. Ensuite utiliser la fonction mysql_real_escape_string() sur toutes les variables utilisées dans les expressions SQL.





.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
 

<?php

$requete_sql " UPDATE table
                 SET nom = '".mysql_real_escape_string($nom)."'
                 WHERE id = ".mysql_real_escape_string($id)."
               ";

mysql_query($requete_sql);

?>


Si vous laissez les magic_quotes sur ON, vous devrez vous fier à votre instinct.

Commentaires (4)
Nouveau message Invité
le 11 Déc 2008 à 09:58:00
Bien sûr cette protection n'est pas suffisante car on peut très bien injecter une requête SELECT qui ne contient pas de caractères spéciaux.

Par exemple : SELECT BENCHMARK(1000000000000,(MD5(1))

Cette requête va rendre le serveur MySQL complètement inutilisable et pourtant la requête injectée ne contient aucun caractères spécial mysql échappable.

Le seul moyen de faire les choses proprement est d'utiliser les requêtes préparées avec MySQLi ou PDO.
Nouveau message Invité
le 12 Déc 2008 à 00:27:00
Ça me rappelle l'excellent strip paru sur XKCD il y a un moment : http://xkcd.com/327/

La première sécurité pour moi est de toujours valider les données injectées dans la base avant même de se poser la question d'échapper les caractères.
Nouveau message Invité
le 12 Déc 2008 à 09:56:00
Unknown a écrit:
Le seul moyen de faire les choses proprement est d'utiliser les requêtes préparées avec MySQLi ou PDO.


+1

C'est vraiment le seul moyen (facile).

Après il y a toute l'histoire des ORM (http://www.doctrine-project.org/).

Mais un chouille plus compliqué.
Nouveau message Koogar
le 12 Déc 2008 à 10:44:00
pour mysqli il faut une version mysql >= mysql 4.1.3 et une version php >= php5

Si l'on regarde les stats de Nexen de Septembre 2008 :
http://www.nexen.net/chiffres_cles/phpversion/18781-statistiques_de_deploiement_de_php_de_septembre_2008.php

il y a + de 50% des serveurs qui sont avec des versions inferieurs à php5


Poster un commentaire

:P :)
:wink: :lol:
:surprised: :confused:
:idea: :no:
Taille du texte:
Couleur:
 
Code de sécurité
Offres d'emploi

Déposer vos articles

Déposer vos articles

Nous accueillons avec plaisir les articles et les critiques de livres, et nous encourageons les entreprises à contribuer avec les rapports d'industrie sur l'utilisation avantageuse de PHP. Vous pouvez également soumettre des articles de journaux et les publications de la presse professionnelle telles que les annonces de produits, et nous serons heureux de les publier sur notre site.

Contactez-nous