Formulaire et sécurité

Résolu
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005 - 16 sept. 2005 à 11:16
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005 - 5 oct. 2005 à 15:56
Bonjour,

Depuis quelques temps un petit malin s'amuse avec le formulaire d'inscription à la newsletter d'un site dont je m'occupe. N'étant pas un expert en php (j'utilise la fonction mail pour recevoir les inscriptions), j'ai cherché à sécuriser un minimum le formulaire.

Voici son code avec le php qui traite les variables générées :

<form action= "sommaire.php3" method="post" name="news" OnSubmit="return(VerifForm(this))">
NEWSLETTER , les nouvelles par mail. Je m'inscris :




Oui

Non

</form>
<?php //Envoi newsletter
if (!empty($_POST['choix']) && !empty($_POST['monmail'])) {
$email2 ="webmaster@mondomaine.com";
$headers="From: ".$_POST['monmail'];
$titre="NEWSLETTER : ".$_POST['choix'];
$message="Demande pour la newsletter :\n";
$message.="- Choix : ".$_POST['choix']."\n" ;
$message.="- Adresse email : ".$_POST['monmail']."\n";
$message.="\n - Message envoyé par le site http://www.mondomaine.com -\n";
mail($email2,$titre,$message,$headers);
echo " -> envoyé !";
}
?>

J'utilise $_POST comme il est recommandé, pour ne pouvoir récupérer que les variables générées par le formulaire, et bien que mon hébergeur ait laissé les variables globales à ON.
En oubliant la vérification de l'adresse mail via javascript, je devrais recevoir que "oui" ou "non pour la variable "choix". Or, le petit malin arrive à mettre un peu ce qu'il veut dans ces variables, ainsi qu'à faire du bcc vers une adresse aol. C'est pas bien méchant mais j'aime pas trop ça.

Des idées pour blinder tout ça ?

29 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
19 sept. 2005 à 20:14
D'accord pour dire que c'est mal codé, par contre le "On écrit jamais dans $_POST"



ah bon ?



t'as oublié un isset($_POST['choix']) dans la condition :-)




<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005
19 sept. 2005 à 20:20
J'avais compris qu'un isset sur un seul champ suffisait pour que logiquement tous les champs proviennent bien du formulaire?

Il manque aussi des parenthèses ouvrantes après les else, enfin je crois. Bon, je reteste tout ça.
0
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005
5 oct. 2005 à 12:13
Pour parfaire le tout, j'ai ajouté une vérification supplémentaire :

if(!eregi("MIME-Version: ",$_POST['monmail'])) { // la suite du traitement

} else { echo "non traité"; }

En fait c'est en simulant une commande POST que le mec injecte du html dans mon champ de formulaire. Cette vérification devrait en principe bloquer tout envoi de mail.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 oct. 2005 à 12:40
Hello,



En fait c'est en simulant une commande POST que le mec injecte du html dans mon champ de formulaire



Si tu testes tous les champs de TON formulaire, sans laisser la
place à d'autres, je ne vois pas comment il peut simuler une requête
post qui passe? Il connait le nom de tes champs...?
0

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

Posez votre question
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005
5 oct. 2005 à 12:59
Je loggue l'utilisation des variables générées par mon formulaire. Or, tous les essais ne laissent jamais aucune trace de l'identitié d'un navigateur. Par ailleurs, quand il y a des essais, ils sont espacés de 1 à 2 secondes. J'en conclus que c'est généré automatiquement par une machine extérieure.
J'ai lu sur d'autres site qu'on peut parfaitement simuler une commande POST en php. Ce n'est donc pas très difficile de détourner un formulaire pas assez verrouillé pour en faire un relai futur pour du spam ou autre.
Dans mon cas, les tests n'ont rien de méchants. Les adresses ajoutées en bcc sont sans doute inexistantes. Ce ne sont que des tests, 3 ou 4 de suite, espacés de 5 à 10 jours, en provenance d'une ou deux IP, mais dernière toujours la même (aux US).

Le nom de mes champs, ils sont dans le formulaire, suffit de regarder le code.
En fait la page de mon formulaire n'est pas utilisée. C'est la page à laquelle il renvoit qui est attaquée directement, avec je pense, la simulation d'une commande POST venant d'ailleurs.
Sinon, comment expliquer qu'il fasse passer des entêtes html, d'autres To:, un bcc: et du texte dans mon champ "monmail" (ou plutôt dans la variable) qui est limité à 50 caractères en longueur ?

J'attends maintenant de voir si je loggue d'autres tentatives.
Je pourrai vous redonner mon traitement php final s'il s'avère que ça fonctionne bien.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 oct. 2005 à 13:12
Oui bon j'avais omis qu'on pouvait mater le code source d'une page, lol.



Oui simuler une requête post en php est très facile.



Pour les 50 caractères, suffit de faire la vérif en php, plutôt que de
faire confiance à la longueur du champ spécifiée dans le html. Tu
limiteras déjà ses possibilités, à ton "hacker".



Tu peux aussi prévenir ton hébergeur...ça risque de l'intéresser, ton histoire.

Enfin, si les IP restent les mêmes, tu peux toujours les bloquer.



Pour le reste, bah tjrs pareil : sécurise au maximum et vérifiant que
tu as exactement ce que tu voulais avoir dans tes champs, rien d'autre.
0
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005
5 oct. 2005 à 13:19
Et oui y'a des choses à faire, c'est ce qui est rassurant, donc j'apprends pas mal grâce à ce problème, d'autant que ça n'a vraiment aucun caractère alarmant, c'est un tout petit site presque perso et pour l'instant, je suis très loin d'avoir du spam sous forme de flood.

Donc je blinde peu à peu et je surveille :)
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 oct. 2005 à 15:44
sinon tu n'as qu'à foutre une "image de protection pour formulaire".
J'ai justement fait une source à ce sujet, fini les requêtes massives,
ton formulaire ne sera plus envoyé si le code tapé par l'internaute
n'est pas valable.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
ivanmac Messages postés 25 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 6 octobre 2005
5 oct. 2005 à 15:56
Merci de l'idée. Pour ce formulaire, ça serait trop contraignant mais en cas de besoin j'y re penserai.
0
Rejoignez-nous