Caractères d'échapements, Quel méthode ?

djangoboy Messages postés 54 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 25 septembre 2007 - 2 nov. 2005 à 08:37
psychosic Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 11 novembre 2005 - 14 nov. 2005 à 12:26
Bonjour a tous,

Il y a 3 jours précisement je me suis fais tapé sur les doigts par monoceros01 et anthomicro car j'ai employé les fonction suivant pour traiter mes formulaires.(Mais heuseusement qu'ils l'ont fait !)
J'utilisé :

$pseudo
= $_POST['pseudo'];
$pseudo= addslashes($pseudo);
$pseudo= htmlentities($pseudo);
$pseudo= nl2br($pseudo);
$pseudo= ucfirst($pseudo);

que ca soit pour les input text ou les text array.

J'aimerais donc savoir "les normes", qu'est ce que je dois mettre pour être sur que les caractère déchapemment soit mis correctement, pour pouvoir enregistrer ces informations dans ma base de donnée, pour ensuite les publier sur mon site sous formes de news.

Donc si quelqu'un aurait la gentillesse de m'aider, car j'ai réfléchi aux lignes de code apparaissant plus haut, c'est vrai que certain serveur sont configuré autrement.

Merci d'avance de votre aide.

.: Dj.Ango :.</< body>

8 réponses

djangoboy Messages postés 54 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 25 septembre 2007
2 nov. 2005 à 08:47
Mise a jour !

$pseudo= ucfirst($pseudo); est a enlevé, j'ai oublié de le faire, c'était juste pour la présentation.
Voila je pense que c'set claire.
Tchao

PS : Si la réponse vous convient merci de l'accepter pour fermer ce thread ...

.: Dj.Ango :.</< body>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 nov. 2005 à 09:00
Hello,

- les quotes... : le truc est de savoir comment ton serveur est configuré. Gère t il tout seul les quotes avec les magic quotes ? Mais ne se baser que sur ça pose un problème de portabilité (et si tu changes de serveur, et que la gestion des quotes change...tu ne voudrais pas devoir revoir tout ton code ;-)). Le mieux est donc d'utiliser un script comme celui d'Antho : http://www.phpcs.com/code.aspx?id=29887
Ps : ceci se gère AVANT tout enregistrement dans une base, passage de variable par get ou post, etc...
PHP possède une fonction propre à mysql pour gérer ça : mysql_real_escape_string () que je préconise d'utiliser dans ces cas-là. Prendre cette précaution va déjà bloquer la plupart des éventuelles attaques injections sql.
A lire :
http://fr.php.net/magic_quotes//code.aspx?id=29887/code.aspx?id=29887

- htmlentities : les entités html peuvent être pénibles pour la mise en page d'un site. Un exemple typique : forum, livre d'or...si le mec s'amuse à mettre un
(ou un </table> vu que généralement les gens font -malheureusement- de la mise en page par tableaux...), ça peut mettre à mal un design concocté avec amour. Il y a plus ennuyeux : le javascript. Je ne vais pas donner ici un exemple de petit script nuisible, mais bon...c'est pas très dur à trouver ;-) . C'est pour ça que généralement, sur toute entrée utilisateur, on utilise htmlentities (ou html_special_chars quand on gère bien l'encodage de ses pages).
A lire : http://fr2.php.net/htmlentities

- nl2br : ça, c'est juste une question de mise en page. Ca remplace les retours chariots "systèmes" par de bons vieux
. Ca permet de garder la "mise en page" (les retours chariots uniquement en fait) de l'utilisateur lors d'une saisie dans un textarea par exemple. Aucun soucis de sécurité ici.

- ucfirst : heu bah ça c'est cosmétique, encore une fois. ca met des majuscules...il y a deux fonctions pour ça. Aucun problème de sécurité là-dedans.

Globalement, à lire : http://fr.php.net/manual/en/security.php

Pour la pratique de recopier la valeur d'une globale (un $_POST par exemple) dans une tierce variable...si tout est bien géré, je n'en vois pas l'utilité.

Dans tous les cas, ce qui est important : ne jamais faire confiance à l'utilisateur. Toujours bien vérifier que l'on reçoit ce que l'on attend, et pas autre chose! Toujours vérifier l'existence des variables (attendues) lors d'une saisie utilisateur (avec des isset () : http://fr2.php.net/isset). Toujours vérifier leur contenu (tu attends un entier dans une saisie ? Vérifie que ça en soit un! Le cas échéant, force la conversion de la saisie). Et toujours gérer les cas d'erreur...si tu n'as pas la valeur voulue, déclenche une erreur toi-même, n'attend pas que php le fasse et affiche son vilain message aux yeux de tous. Ca peut, dans certains cas, aiguiller des gens mal intentionnés. Et puis ça ne fait pas pro ;-) Travaille toujours en error_reporting à E_ALL, c'est important pour sécuriser au mieux un site : http://fr.php.net/error_reporting.

Il y aurait des tas de choses à dire...je laisse le soin à d'autres de faire des ajouts.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 nov. 2005 à 11:07
"PHP possède une fonction propre à mysql pour gérer ça :
mysql_real_escape_string () que je préconise d'utiliser dans ces
cas-là. Prendre cette précaution va déjà bloquer la totalité des attaques type injections sql."



"Dans tous les cas, ce qui est important : être parano à 150% !."

Au moins ;)
0
psychosic Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 11 novembre 2005
9 nov. 2005 à 00:04
moi j'utilise la fonction base64_encode/decode mais je veux bien un retour de performance sur vos methodes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 nov. 2005 à 09:08
Le problème de base64 est qu'elle allonge sérieusement les chaînes,
donc pour traiter ces cas-là, autant utiliser les fonctions dédiées, à
mon sens.

J'utilise base64 essentiellement quand je veux trimballer dans une
variable, ou dans un champ caché, un objet/tableau sérialisé. Ca vire
les caractères à la con ;-)
0
psychosic Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 11 novembre 2005
13 nov. 2005 à 17:38
sinon moi j'ai fais une fonciton qui test si c'est un texte:



function pbAccent($mot)

{

$mot=str_replace("à", "a", $mot );

$mot=str_replace("â", "a", $mot );

$mot=str_replace("ä", "a", $mot );

$mot=str_replace("é", "e", $mot );

$mot=str_replace("è", "e", $mot );

$mot=str_replace("ê", "e", $mot );

$mot=str_replace("ë", "e", $mot );

$mot=str_replace("î", "i", $mot );

$mot=str_replace("ï", "i", $mot );

$mot=str_replace("ô", "o", $mot );

$mot=str_replace("ö", "o", $mot );

$mot=str_replace("ù", "u", $mot );

$mot=str_replace("ü", "u", $mot );

$mot=str_replace("û", "u", $mot );

return $mot;

}



function IsText($txt)

{

$txt=strtolower($txt);

$txt=pbAccent($txt);

$test=ereg("a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|t|s|u|v|w|x|y|z|'|"",$txt,$items);

return($test);

}



function formatTextToSQL($text)

{

$text = str_replace(chr(10), "
", $text ); //10

$text = str_replace(chr(13), "", $text ); //13

$text = addslashes($text);

//echo($text);

return $text;

}



function formatTextToHTML($txt)

{

$txt = str_replace("
",chr(10),$txt);

$txt = str_replace("
",chr(10),$txt);

$txt = stripslashes($txt);



return $txt;

}



Donc dans mes classes avant de faire la requete je fais ca



pour un Insert

if(IsText($maVariableATester)) $maVariableATester=formatTextToSQL($maVariableATester);



pour un Select

if(IsText($maVariableATester)) $maVariableATester=formatTextToHTML($maVariableATester);
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
13 nov. 2005 à 21:13
Salut!

a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|t|s|u|v|w|x|y|z|

a-z

:D



@++



R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
psychosic Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 11 novembre 2005
14 nov. 2005 à 12:26
merci mec!
0
Rejoignez-nous