8791 sujets

Développement web côté serveur, CMS

Bonjour,

ma question serait au niveau sécurité.

Je vous explique, nous avons un formulaire comportant des inputs, des select, des textareas, ...

Quand nous récupérons les valeurs, à l'aide de la variable $_POST correspondant, quel fonction mettez-vous ?

C'est à dire, un addslashes + trim + ...

J'espere que vous aurez compris ma question !
Modifié par polak25 (08 Aug 2008 - 14:51)
Salut,

en général je fais comme cela :
$champ = !empty($_POST['champ']) ? htmlspecialchars(trim($_POST['champ'])) : '';
A noter que si magic_quotes_gpc est à ON il faut rajouter un stripslashes.

Ensuite tout dépend de ce que l'on fait de ce champ. Par exemple si c'est pour alimenter une requête il faut regarder du côté de mysql_real_escape_string.

Enfin, la sécurité est un vaste domaine et il existe tout plein d'articles intéressants à lire sur le web. Smiley cligne

A+
En general, j'utilise des expressions régulières pour ne permettre que les caractères que je décide.

pour le numerique donc, par exemple:


if(preg_match("/\D/",$_POST["champs"]))
{
   $error[]="Erreur sur le champs ....";
}

ainsi je suis sur du champs $_POST que je manipule
polak25 a écrit :
Et pour une variable GET ? que feriez-vous ?
Réponse courte : euh... pareil ! Smiley lol

Réponse moins courte : quel que soit le type de variable c'est une bonne habitude de partir du principe que le simple visiteur (ou le hacker fou) a pu y mettre n'importe quoi...
Modifié par Heyoan (09 Aug 2008 - 17:04)
Salut,

superjun a écrit :
Personellement j'utilise un script que j'ai trouvé et qui me semble assez bien fait.
Tu peux le trouver sur http://findel.free.fr/blog/post/2004/05/25/18-securiser-les-parametres-recus
L'article est intéressant mais les solutions me semblent un peu "vieillotes" Smiley langue !

Par exemple je ne vois pas l'intérêt d'utiliser htmlentities (et plus particulièrement d'enregistrer un é à la place d'un simple "é") alors que htmlspecialchars suffit amplement.

Pour le reste et à l'exception du remplacement des caractères de Word il me semble également que mysql_real_escape_string devrait suffire.

Si je me gourge, je reste à l'écoute ! Smiley biggrin
Modifié par Heyoan (10 Aug 2008 - 00:59)
bonsoir à tous,

je rajouterais qu'au delà de contrôler l'encodage et autre caractère d'échapement, ce qui est important pour le traitement de ces données c'est ce que tu vas en faire.

si c'est pour "injecter" un email dans une base de données type mysql, il faut vérifier la validité de cette email avant toute chose, si c'est pour les renvoyer dans une partie texte le traitement sera autre ...etc
En gros on peut faire la différence entre les "input et les "output" (ce qui rentre et ce qui sort)

on peux utiliser les filtres "blacklist" et "whitelist" comme par exemple (code par M.coates):

function whitelist($dirty_data)
{

$dirty_array = str_split($dirty_data);
$clean_data=”";
foreach($dirty_array as $char)
{
$clean_char=preg_replace( “/[^a-zA-Z0-9_]/”, “”, $char );
$clean_data=$clean_data.$clean_char;
}

return $clean_data;
} 

Il y a aussi les méthodes ctype_alpha ou _alnum pour valider certaines chaînes

...etc , mais à nouveau il faut savoir ce que tu vas en faire et vers où tu les envoies, et aussi ne jamais faire confiance à ce que l'utilisateur entre -> vérifier et valider toutes les entrées Smiley biggrin
Modifié par kzone (10 Aug 2008 - 02:13)
Selon la doc PHP, il y a effectivement une différence entre htmlentities() et htmlspecialchars(), qui correspondrait à un plus grand nombre d'entités traduites. Effectivement, les deux ne semblent donc pas nécessaires.

J'utilise cette fonction parce que j'ai la flemme de me programmer la mienne propre et que vu la petite taille de mes projets, ça n'en vaut pas tellement la peine.
superjun a écrit :

J'utilise cette fonction parce que j'ai la flemme de me programmer la mienne propre et que vu la petite taille de mes projets, ça n'en vaut pas tellement la peine.
A vrai dire j'ai utilisé htmlentities pendant des années Smiley gangsta ! D'abord parce que tous les tutos que j'ai lu à l'époque (et encore beaucoup aujourd'hui !) ne parlaient que de cette fonction et pas du tout de htmlspecialchars; ensuite parce que je n'arrivais pas à configurer ma BDD locale et PHP de la même façon que mon hébergeur et que du coup c'est le seul moyen que j'avais trouvé pour récupérer les dumps de ma base; et surtout parce que je n'avais quasiment rien compris à l'encodage. Smiley ravi