ivanmac
Messages postés25Date d'inscriptionmardi 3 mai 2005StatutMembreDernière intervention 6 octobre 2005
-
16 sept. 2005 à 11:16
ivanmac
Messages postés25Date d'inscriptionmardi 3 mai 2005StatutMembreDerniè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.
ivanmac
Messages postés25Date d'inscriptionmardi 3 mai 2005StatutMembreDerniè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.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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...?
Vous n’avez pas trouvé la réponse que vous recherchez ?
ivanmac
Messages postés25Date d'inscriptionmardi 3 mai 2005StatutMembreDerniè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.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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.
ivanmac
Messages postés25Date d'inscriptionmardi 3 mai 2005StatutMembreDerniè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.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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.