Spam via un formulaire contact PHP ???

WRInaute discret
Salut,

Depuis quelques jours (et cette nuit en particulier !!!), je reçois une multitude de mails sur l'adresse contact de mon site (qui envoit un mail via mail() php uniquement à mon adresse !)... Cette nuit, au mini 150-200 mails dont les en-têtes ressemblent à ça :

Code:
Return-Path: <cgi-mailer-bounces-140586907@kundenserver.de>
Delivered-To: online.fr-*****
Received: (qmail 18398 invoked from network); 10 Feb 2006 22:47:27 -0000
Received: from moutng.kundenserver.de (212.227.126.173)
  by mrelay4-1.****.fr with SMTP; 10 Feb 2006 22:47:27 -0000
Received: from [212.227.126.200] (helo=mrvnet.kundenserver.de)
	by moutng.kundenserver.de with esmtp (Exim 3.35 #1)
	id 1F7h31-0007GN-00; Fri, 10 Feb 2006 23:47:27 +0100
Received: from [212.227.119.160] (helo=infong344 ident=8)
	by mrvnet.kundenserver.de with smtp (Exim 3.35 #1)
	id 1F7h31-00014d-00; Fri, 10 Feb 2006 23:47:27 +0100
Received: from [70.86.127.130](IP may be forged by CGI script)
	by infong344.kundenserver.de with HTTP; Fri, 10 Feb 2006 23:47:27 +0100
Date: Fri, 10 Feb 2006 23:47:27 +0100
Precedence: bulk
To: ****mon adresse ****
Subject: [HumourEnPJ][contact] as  Content-Type: multipart/mixed; boundary=a69afbbb79e278a6f4da7747d691472b MIME-Version: 1.0 Subject: festival take place. t was the hay harvest bcc: andrew@lifeserious.com  This is a multi-part message in MIME format.  --a69afbbb79e278a6f4da7747d691472b Content-Type: text/plain; charset=\"us-ascii\" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit  sepulchre of hrist, but through praying there too long the ship sailed without him, and he was forced to stay behind. hen came a man and took him upon his horse, and they would ride --a69afbbb79e278a6f4da7747d691472b--   .  
From: as
Content-Type: multipart/mixed; boundary=a69afbbb79e278a6f4da7747d691472b
MIME-Version: 1.0
Subject: festival take place. t was the hay harvest
Message-Id: <E1F7h31-00014d-00@mrvnet.kundenserver.de>
X-Provags-ID: kundenserver.de abuse@kundenserver.de sender-info:140586907@infong344

ça ressemble donc bigrement à du spam, mais la question que je me pose est : est-ce que ce spam n'est destiné qu'aux webmestre de tout un tas de sites via un robot qui chope les formulaires d'envoi de mail "contact" automatiquement où est-ce qu'il y a un risque pour qu'une faille de sécurité quelquonque puisse faire que mon site devienne relais de spam ????

Et dernière question, comme faire pour contourner tout ça et bloquer ce bordel !!!! ??? :(((

Merci beaucoup pour vos réponses.
 
WRInaute passionné
Même chose pour moi.

J'ai reçu une centaine de pourriels ce matin et ça ne semble pas s'arrêter... + plusieurs tentatives d'attaque via les formulaire de recherche du site concerné.

Je ne sais pas comment ils ont fait pour récupérer mon e-mail...

Même si thunderbird les envoit directement à la corbeille, c'est lourd ! :evil:
 
WRInaute accro
Est-ce que dans le script tu vérifies que cela vient bien de ta page et en POST et non en GET ?
En plus, il faut vérifier dans les différents champs qu'il n'y ait que des caractères autorisés et donc ne devant pas contenir des To: MIME etc...
Si le script laisse la possibilité d'insérer des champs To: à un quelconque endroit, il peut servir de relais spam.
 
WRInaute impliqué
J'ai le même soucis mais je doute que ça provienne réellement du formulaire de contact mais plutôt de machines infectées. Je vais faire quelques tests à tout hasard, mais ça n'est pas un trop gros problème pour le moment (une vague de spam, puis rien, puis une nouvelle vague...).

Pour info, vous utilisez une librairie particulière pour envoyer vos emails ou c'est directement via la commande mail() de PHP ?
 
WRInaute discret
merci pour ces premières pistes... Pour ma part, dans mon cas, je suis quasi certain que ça vient de ma page formulaire de contact car j'ajoute 2 flags à l'objet (qu'on voit dans le header fournit)...

Pour le script en lui même, je vérifie qu'il y a bien un $_POST['submit'] , et je poste de façon très "brutale" et non paramétrable sur mon adresse perso ! ;)

Code:
$mailok=mail("**monmail**","[HumourEnPJ][contact] ".$_POST['courriel'],$_POST['msg'],"From: ".$_POST['courriel']."\r\n");

par contre je vois ici, que je ne met pas de "header" dans le mail (en laissant faire le serveur par défaut), serait-t'il possible que le $_POST['courriel'] puisse débordé dessus avec les bons caractères ??? J'ai un peu peur que oui ???
 
WRInaute discret
en attendant de trouver une solution fiable, je désactive le truc !! Je ne tiens pas à me pourrir mon compte auprès de 1&1 un peu plus si par hasard il a servit à envoyer tout un tas de spams :((((
 
WRInaute impliqué
smrhp> c'est le meilleur test possible, préviens-nous si tu continues de recevoir des spams via un formulaire... qui n'existe plus ;-)
 
WRInaute discret
cha ch'est chûr ;o))) 8)

je vous tient au courant dans la journée (puisqu'à midi j'en avais encore reçu une série !!)
 
WRInaute impliqué
Leonick a dit:
Est-ce que dans le script tu vérifies que cela vient bien de ta page et en POST et non en GET ?

Peu importe que ce soit en POST ou en GET, les robots spammeurs sont capables de faire les deux.

Pour se protéger de l'injection d'en-tête dans les mails, il faut virer des entrées utilisateur tout ce qui contient: "\r","\n","%0ad", "%0AD","%0d","%0D","Content-Type:","bcc:","to:","cc:"
 
WRInaute impliqué
smrhp a dit:
...serait-t'il possible que le $_POST['courriel'] puisse débordé dessus avec les bons caractères ??? J'ai un peu peur que oui ???
Et oui, les formulaires de contact doivent filtrer les donnees pour eviter les detournement de la zone header.

Un grand classique :)

En gros, tu peux deja appliquer cela

Code:
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ?? :(");
}

Premier lien trouve sur google en 2 secondes sur : http://www.phpsecure.info/v2/article/Ma ... Inject.php
 
WRInaute discret
merci à tous...

réponse pour l'origine : y'a pas photo ça venait bien de ma page php contact (j'ai remplacé mail(php) par un mail(tout en dur) et je reçois toujours des mails mais sans les hieroglyphes foireux du robots qui cherchait à utiliser ma page !)


Concernant la sécurité, ben en fait, jamais je ne me serais douté que la fonction mail() pouvait être "piratable" ainsi.... Je pensais que les trous pouvaient venir "pleinement" de la part du webmestre, genre laisser définir le to dans une variable et ne pas savoir à qui on envoit... Mais que le paramètre objet, message puisse être exploité en plaçant des caractères de contrôle dedans :(
Bon, ben maintenant me voilà au courant... Je vais de ce pas filtrer tout ça... Y compris sur d'autres sites...

Encore merci pour ces réponses rapides...
 
WRInaute discret
PARFAIT ça semble fonctionner ! Je m'étais mis un mail() d'alerte quand la règle de filtre est utilisée et en effet je reçois des petits mail (voulus cette fois-ci) donc ça filtre bien et on tentait bien de m'utiliser en relais...

Bon, ça aura fonctionné un jour ou deux... :( mais c'est maintenant corrigé
 
WRInaute discret
dans un premier temps j'ai appliqué la plus simple ;) mais sur toutes les varialbes passées à mon mail (en les cumulant dans une chaine pour le test) :

Code:
if (eregi("\r",$test) || eregi("\n",$test)){
die("Why ?? :(");
}

puisque je ne laisse pas la possibilité de "personnalisé" le header, le fait de bloquer simplement le "débordement" de header, devrait être suffisant pour mon form contact ;)
 
WRInaute impliqué
C'est vrai que la premiere fois que l'on decouvre a quel point c'est facile de jouer avec les header, on est plutot surpris. On se fait tous avoir un jour avec ca ;)
 
WRInaute accro
Ce que je ne comprends pas comment ...??

Code:
<?php
     $to      = 'personne@example.com';
     $subject = 'le sujet';
     $message = 'Bonjour !';
     $headers = 'From: webmaster@example.com' . "\r\n" .
     'Reply-To: webmaster@example.com';

     mail($to, $subject, $message, $headers);
 ?>

ou est la faille ?
 
WRInaute accro
si on remet un to ou un bcc dans le corps du message, c'est accepté ! :cry:
d'où l'intérêt de vérifier aussi $message
 
WRInaute discret
thierry8 a dit:
Ce que je ne comprends pas comment ...??

Code:
<?php
     $to      = 'personne@example.com';
     $subject = 'le sujet';
     $message = 'Bonjour !';
     $headers = 'From: webmaster@example.com' . "\r\n" .
     'Reply-To: webmaster@example.com';

     mail($to, $subject, $message, $headers);
 ?>

ou est la faille ?

ben là dans ton code strictement y'en a pas mais si on écrit ça :

Code:
<?php
     $to      = 'personne@example.com';
     $subject = 'le sujet';
     $message = $_POST['message'];
     $headers = 'From: webmaster@example.com' . "\r\n" .
     'Reply-To: webmaster@example.com';

     mail($to, $subject, $message, $headers);
 ?>

là y'a une faille !! :( C'est clair que pour le coup la fonction mail() est vraiment pas sécurit' du tout !!!! :?
 
WRInaute discret
Spam

Bonjour,

J'ai aussi le même problème. Suite à votre recommendation j'ai mit le

Code:
if (eregi("\r",$from) || eregi("\n",$from)){ 
die("Why ?? :("); 
}

Mais certains passaient quand même avec comme sujet @mon_nom_domaine.com j'ai donc ajouté || eregi("@mon_nom_domaine.com ",$subject)

J'ai effectivement moin de spam. Mais il y a en quelques un qui passe encore. Je reçois des messages du genre :

From : "<makes"@motti.privatedns.com ou "<might"@ephant.privatedns.com

et le sujet est vide.

Peut être que j'ai pas compris comment ça fonctionne. Est-ce que quelqu'un d'autres à le même problème?
 
WRInaute accro
Re: Spam

isolu a dit:
From : "<makes"@motti.privatedns.com ou "<might"@ephant.privatedns.com
et le sujet est vide.
En plus de vérifier le contenu, pour voir s'il ne contient pas de caractères interdits, il faut aussi vérifier que les variables nom, mel et contenu ne soient pas vide.
 
WRInaute discret
bon me revoilà ! Car je m'aperçois d'un soucis !! Si je filtre la partie "contenu" du message en interdisant les \r \n ça pose un petit problème non négligeable ! Plus possible d'envoyer un message avec des sauts de ligne !!! ;)

C'est un peu gênant ça ;)...

Mais après test (j'ai fait des post depuis un programme hébergés sur mon ordi (pas sur le serveur) vers mon URL pour tester ce que ferais un spammer j'imagine. Apparement, si je mets des "%0A" comme indiqué dans le lien donné (plus haut dans ce fil), c'est bon ça ne pose pas de problème, le contenu qui suit (Cc:bidule@example.com) apparait dans le corp du message et je ne reçois pas de message à l'adresse bidule@example.com...

Me trompe-je où c'est seulement les champs "To", et "Header" qui sont sensibles ? Visiblement le "Subject" et "Body" sont moins gênants ??

(bon subject ici ne posait pas de problème puisque pas libre)
 
Nouveau WRInaute
J'ai eu aussi ce problème de spam via mon formulaire de contact. J'ai d'abord ajouté ce bout de code :

Code:
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ?? :(");
}

mais ça n'a rien changé.

Puis finalement, comme ça à l'air d'être des robots, j'ai ajouté un code (image) de sécurité à recopier pour valider le formulaire, plus une vérification des champs obligatoires, et depuis ces modifs, je n'ai plus eu de spam :wink:
 
WRInaute passionné
Dans mon cas j'ai remplacé les formulaires de contact par des "mailto:" où le @ est remplacé par d'autres caractères, ce que je pensais faire de toute façon (à force de vouloir contacter des webmasters pour mes annuaires, je suis devenu allergique aux formulaires de contact !).

Mais j'ai cru comprendre que cela pose des problèmes d'accessibilité.

Je me pose surtout des questions concernant les problèmes de sécurité liés aux formulaires directement en rapport avec une base de données.
 
WRInaute discret
Même chose que Malouk.

J'ai mit le code et une validation des champs pour vérifier qu'ils sont pas vide et voilà, je reçois plus de spam. Youpiiii!!

Merci à tous.
 
WRInaute discret
salut,

de nouveau moi.

Est-ce que quelqu'un sait m'écrire ça en ASP ?? (j'ai besoin de modifier une page pour un amis sur un hébergement en ASP mais on va dire que c'est pas trop ma tasse de thé l'asp ! ;) )...
 
WRInaute passionné
J'ai le même problème, depuis que j'ai mis un formulaire de contact en php sur ma page, depuis 1 mois je resoit chaque jour quelques mail anglais (pour le viagra, pub... ^^)

sa me soule !!!!
 
WRInaute discret
en php pas très dur, il te suffit de commencer à mettre en place les solutions indiquées plus haut dans ce fil, ça fonctionne bien... Pas eu de spam depuis que j'ai mis ça en place...

Par contre je n'arrive toujours pas faire la même chose en ASP, mes tentatives de regexp façon asp bloque complètement mon envoi de mail... :(
 
WRInaute passionné
ça fait un bout de temps que je n'ai pas fait d'asp mais il me semble qu'en vbscript il y a un équivalent au strpos() du php.

Cherche par exemple, sur la page suivante : http://www.laltruiste.com/document.php? ... haine.html

Parce que je ne sois pas l'intérêt d'utiliser des expressions rationnelles si il s'agit juste de chercher une expression toute simple, à part bouffer des ressources inutilement ...
 
WRInaute discret
oui c'est vrai qu'il n'est en fait pas utile d'utiliser un eregi ni en php ni un regexp en asp en effet !

d'autant plus que l'utilisation du regexp en asp n'est apparement pas aussi facile qu'en php ;) !!

Code:
dim xch
dim regEx
Set regEx = New RegExp
regEx.Global = True
regEx.Pattern = "\r"
' remplace par vide
xch = regEx.replace(Request.Form("Email"),"")
regEx.Pattern = "\n"
xch = regEx.replace(xch,"")
objNewMail.From = xch

voici le début de qqe chose à quoi j'ai aboutis... j'ai pas encore réussi à tester ce que ça donnait en "simulant" une attaque sur mon formulaire...
 
WRInaute discret
bon et en beaucoup plus simple grace à ta judicieuse remarque sur l'inutilité d'un regexp !!

Code:
	if instr(xch,chr(10))>0 or instr(xch,chr(13))>0 then
		sEtat = "MAIL_PAS_ENVOYE"
	else
		objNewMail.Send
	end if

merci. Bon reste à tester et à voir ce que ça donne sur la durée... !
 
Nouveau WRInaute
Ne vaut-il pas mieux utiliser une class PHP type emailer que la fonction mail() tout simplement qui n'est pas sûr du tout ?
 
WRInaute discret
bah en php ça revient à se faire son petit système de mailer personnalisé ;)... Mais par contre pour mon problème en asp, là ça résoud rien ;))
 
Discussions similaires
Haut