OVH Cloud OVH Cloud

Recupere la chaine avant passage en fonction anti injection.

2 réponses
Avatar
Franklin
Bonjour à tous.

Récuperant une chaine de caractere dans un $_Post, je lui applique une
fonction anti injection.

Cette fonction fait un stripslash suivi d'un ereg_replace(' +', ' ',
trim($string)) et suivi d'un preg_replace("/[<>]/", '_', $string).

Que pensez vous de cette fonction ?


Mais j'ai un script où je dois ressortir cette chaine de la base pour
l'aficher à l'écran, et là j'ai parfois des caracteres parasites du au
passage de la chaine dans ces fonctions avant la mise en base.

Savez vous comment remettre la chaine telle qu'elle était avant application
de la fonction antiinjection pour pouvoir l'afficher telle qu'elle a été
saisie par l"utilisateur ?

merci à tous.

2 réponses

Avatar
Olivier Miakinen

Récuperant une chaine de caractere dans un $_Post, je lui applique une
fonction anti injection.

Cette fonction fait un stripslash suivi d'un ereg_replace(' +', ' ',
trim($string)) et suivi d'un preg_replace("/[<>]/", '_', $string).

Que pensez vous de cette fonction ?


J'en pense qu'elle n'est pas inversible.

Mais j'ai un script où je dois ressortir cette chaine de la base pour
l'aficher à l'écran, et là j'ai parfois des caracteres parasites du au
passage de la chaine dans ces fonctions avant la mise en base.


Quels caractères ? Des blancs soulignés « _ » ? Oui, c'est normal, et tu
ne peux pas savoir quel était le caractère d'origine parmi les trois
suivants : « < », « > » et « _ ».

Savez vous comment remettre la chaine telle qu'elle était avant application
de la fonction antiinjection pour pouvoir l'afficher telle qu'elle a été
saisie par l"utilisateur ?


C'est impossible en l'état.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
P'tit Marcel
Franklin wrote:


Récuperant une chaine de caractere dans un $_Post, je lui applique une
fonction anti injection.

Cette fonction fait un stripslash suivi d'un ereg_replace(' +', ' ',
trim($string)) et suivi d'un preg_replace("/[<>]/", '_', $string).

Savez vous comment remettre la chaine telle qu'elle était avant application
de la fonction antiinjection pour pouvoir l'afficher telle qu'elle a été
saisie par l"utilisateur ?


utilise une fonction inversible, par exemple en remplaçant un caractère
supposé interdit par % suivi de son code ascii hexadécimal, et en
remplaçant % par %25.

l'affichage se fera par l'inverse de la fonction, soit un truc du genre
(sans garantie) :

preg_replace('`%[a-f0-9]{2}`i',
create_function('$trouve', 'return chr("0x".$trouve[0]);'),
$chaine);