OVH Cloud OVH Cloud

probleme de chaine a mettre en base mysql

2 réponses
Avatar
Napalm28
Bonjour.

j'ai cru comprendre que quand on recupere une chaine dans un post, il faut
faire un traitement sur la chaine avant de la mettre dans une base mysql.

J'ai un peu étudié tout ça, mais j'ai besoin par la suite de réafficher dans
internet explorer la chaine que j'ai enregistré dans la base.

Y a t il des fonctions anti injections sures, qui permettent par la suite de
revenir en arriere et de remettre la chaine telle que le client l'avais
saisie pour la lui afficher sur l'écran ?

Merci à tous.

2 réponses

Avatar
Guillaume Bouchard
Napalm28 wrote:
Bonjour.


Bonsoir,

j'ai cru comprendre que quand on recupere une chaine dans un post, il
faut faire un traitement sur la chaine avant de la mettre dans une
base mysql.


Quand on recupère une variable, qu'elle soit post, get truc ou bidule,
il faut la vérifier. C'est encore plus valable lors de l'insertion en
base de donnée du fait de la "faille" des SQL injections. Mais il n'y a
pas qu'avec les bases de données que l'on peux avoir des failles
critiques par mauvais traitements des données. L'exemple des
includes($_GET['page']); est dans mon top 3 des failles les plus simples
et les plus utilisées.

J'ai un peu étudié tout ça, mais j'ai besoin par la suite de
réafficher dans internet explorer,*firefox,wget,konqueror,mon
navigateur web en general* la chaine que j'ai enregistré dans la
base.


La chaine que tu sauvegardes en base de donnée n'est pas modifiée. Tu la
traites juste pour que lors de l'insertion il n'y ai pas d'effets de
bords qui apparaissent.

Y a t il des fonctions anti injections sures, qui permettent par la
suite de revenir en arriere et de remettre la chaine telle que le
client l'avais saisie pour la lui afficher sur l'écran ?


Dans le cas de Mysql, un coup de addslashes et c'est réglé. Dans le cas
de sybase un coupe de str_replace("'","''",$str); et c'est réglé (À
vérifier, je fais cela de mémoire de lecture de doc sachant que je ne
connais pas du tout sybase. De plus chaques gestionaire doit apporter sa
propre fonction d'échappement, cf la doc). Chaques gestionaires de bases
de donnée à sa propre méthode, le tout est de savoir laquelle utilisé.

J'avais écrit un petit article la dessus et aussi sur mon ennemi numero
1, les magic quotes. Vraiment perfectible et bouré de faute
d'orthographe, il t'illustrera le problème des injections sql :

http://guillaume.apinc.org/2003/aout/12/3-comment-gerer-correctement-les-magic-quotes

(j'ai vraiment honte d'avoir pondu un truc aussi mal orthographié.)

--
Guillaume.

Avatar
loufoque
Napalm28 a dit le 25/04/2005 à 21:54:

j'ai cru comprendre que quand on recupere une chaine dans un post, il faut
faire un traitement sur la chaine avant de la mettre dans une base mysql.


Avec PHP on construit une chaîne SQL que l'on sous-traite à un SGBD.
Une chaîne PHP n'est pas une chaîne SQL. Il faut faire un mappage.
Il suffit de mettre la chaîne entre guillemets simples et d'appliquer
mysql_escape_string().


J'ai un peu étudié tout ça, mais j'ai besoin par la suite de réafficher dans
internet explorer la chaine que j'ai enregistré dans la base.


Les lignes retournées par mysql_fetch_* sont déjà comme il faut.