piratage de formulaire

as2
Eléphant du PHP | 132 Messages

02 juil. 2011, 15:44

Bonjour,
Sur mon site internet, j'ai une page contact avec un bon vieux formulaire php genre

Code : Tout sélectionner

<form method="post" action="post2.php">
Et donc une page post2.php qui traite les données envoyés avec le formulaire et les inscrit dans une base de données MySql.
Le tout programmer par moi-même.
Pour eviter les messages des petits plaisantins, je "scanne" toutes les données envoyées avant de les inscrire dans la BDD.
Pour celà j'utilise un bon vieux parsing cararactère par caractére de tous les champs envoyées, du genre :

Code : Tout sélectionner

if (substr($n, $i,1)=="<") $alerte=1;
Et ça fait 3 ans que ça marche comme ça sans probléme.
Or aujourd'hui on m'a envoyé des tas de merde , par un certain : [email protected]
Et dedans il y avait des <script> ce qui est trés étonnant puisque j'avais interdit le caractére "<" comme je le dis plus haut.
Quelqu'un aurait une idée de l'origine de cette intrusion, et pourquoi mon programme ne l'empeche pas ?
D'avance merci

Eléphant du PHP | 171 Messages

02 juil. 2011, 18:25

Je dirai que ce genre de protection n'est pas très fiable, tout simplement pour la bonne raison que l'on peut changer la façon d'envoyer la balise dans le formulaire.
On peux tout à fait remplacer le caractère < par son équivalent en entité HTML, son équivalent héxadécimal ou encore unicode.

Un article détaillant de nombreuses d'attaques XSS avancés : http://ha.ckers.org/xss.html

Donc la meilleure méthode je crois reste : htmlspecialchars à l'affichage. Les messages sont affichés tel qu'il les a écrit, et ton utilisateur peut envoyer ce qu'il veut, ça s'affichera normalement sans causer de dommages.
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

as2
Eléphant du PHP | 132 Messages

04 juil. 2011, 18:42

Merci, mais htmlspecialchars ne semble pas marcher.
J'ai fait des tas d'essais et finalement j'ai utilisé l'exemple tel quel de :
http://php.net/manual/fr/function.htmlspecialchars.php

Et il n'y a aucune conversion ! ?

Eléphant du PHP | 127 Messages

04 juil. 2011, 22:50

Tu peux combiner plusieurs fonctions, notamment strip_tags (http://php.net/manual/fr/function.strip-tags.php).

A+

as2
Eléphant du PHP | 132 Messages

05 juil. 2011, 16:12

Oui, merci strip_tags marche bien lui :)
Donc j'aurai plus de <script> à l'affichage (théoriquement :) )
Mais ma BDD sera quand même polué de messages non désirés.
Une solution pour empecher celà ?
Tu peux combiner plusieurs fonctions, notamment strip_tags (http://php.net/manual/fr/function.strip-tags.php).

A+

ViPHP
xTG
ViPHP | 7331 Messages

05 juil. 2011, 20:57

Avant d'ajouter tu regardes si le message brut correspond à celui traité avec strip_tags().
Si différent tu l'insères pas, c'est barbare mais c'est infaillible. x)