probleme spam formulaire

WRInaute passionné
Bonjour,

sur un site j'ai un formulaire classique d'envoi de mail en php avec des controles javascript pour verifier que les champs sont bien saisi.

Sauf qu'a priori il y a un robot qui reussi a envoyer des formulaires vides par vagues d'une dizaine (en general la nuit) : on reçoit les mails avec les champs du formulaire vides. Ou alors desfois ils ne sont pas vides et c'est des adresses mail bidon qui sont rempli dans tous les champs et entre autre on trouve la trace de :mhkoch321 qui est présent un peu présent partout :https://www.google.fr/search?q=mhkoch321%40aol.com&hl=fr&lr=&c2coff=1&start=20&sa=N

comment faire? est il possible de detecter si c'est un robot ou un visiteur utilisant un navigateur?
 
WRInaute discret
Il suffit d'ajouter une image avec une sequence de chiffres et/ou de lettres que l'utilisateur doit recopier dans un champ prévu à cet effet avant de valider le formulaire d'inscription.
 
WRInaute occasionnel
Le contrôle des champs vides enjavascript ne suffit pas. Il me suffirait de copier ta page de formulaire, et d'en de virer les contrôles javascript pour pouvoir poster avec des champs vides.
Tu devrais ajouter des contrôles côté serveur, dans ton script PHP. A mon sens, il faut voir le javascript comme une "aide" à l'utilisateur, un truc qui lui dit gentiment et rapidement qu'il a oublié de rmeplir tel champ. En aucun cas il ne peut s'agir d'une méthode de filtrage fiable.
 
WRInaute accro
Ah ah , j ai eu le meme probleme il y a 2 jours. voila ti pas que Slurp recupere l action d un formulaire pour acceder directement à la page :)

donc AW pour corriger ton probleme (vu que je l'ai fait hier :) ) en plus de ton controle javascript, tu met le controle php sur la page suivante pour vérifier que les variables sont bien présentes avant d'envoyer le mail, et voilou. comme ca lorsqu'on tappe directement l url de la page qui envoi le form (en sautant donc l etape de vérif js) ca n enverra plus de mail
 
WRInaute discret
En PHP, avec la librairie GD, tu peux créer des images à la volée.

Fais une recherche sur "PHP GD image confirmation formulaire" ou quelque chose du genre et tu devrais trouver un script que tu pourra adapter à ton site.
 
WRInaute accro
simpson a dit:
En PHP, avec la librairie GD, tu peux créer des images à la volée.

Fais une recherche sur "PHP GD image confirmation formulaire" ou quelque chose du genre et tu devrais trouver un script que tu pourra adapter à ton site.

ta méthode n est pas bonne. image ou pas image, le robot recupere l action du formualire et va directement à la page d envoit du mail, donc il s en fiche qu'il y ai une image ou non :)

ca ne reglera absolument pas le probleme de AW
 
WRInaute accro
AW a dit:
Merci mon petit kiwi,

mais ça c'est valable pour les formulaire vides, mais certain sont pas vides ils sont envoyé avec des adresses e-mail bidon du type: ejbrekzbr@ndmdusite.com dans tous les champs...

j'ai eu ce probleme aussi :) décidemment, on subit la même chose. tu utilises $_POST[variable] ou $variable pour les envoyer ?
 
WRInaute passionné
tu les a reçu aux alentours de 2h du mat kiwi?
mon envoi de mail ressemble à l'exemple de nexen:
<?php
// Plusieurs destinataires
$to = [email='aidan@example.com]'aidan@example.com[/email]' . ', '; // notez la virgule
$to .= [email='wez@example.com]'wez@example.com[/email]';

// Sujet
$subject = 'Calendrier des anniversaires pour Août';

// message
$message = '
<html>
<head>
<title>Calendrier des anniversaires pour Août</title>
</head>
<body>
<p>Voici les anniversaires à venir au mois d\'Août !</p>
<table>
<tr>
<th>Personne</th><th>Jour</th><th>Mois</th><th>Année</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';

// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// En-têtes additionnels
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Anniversaire <anniversaire@example.com>' . "\r\n";
$headers .= 'Cc: anniversaire_archive@example.com' . "\r\n";
$headers .= 'Bcc: anniversaire_verif@example.com' . "\r\n";

// Envoi
mail($to, $subject, $message, $headers);
?>
 
WRInaute accro
et bien il suffit au robot de faire passer les variables par l'url et tu les envoit quoi :)

c etait y a 2 jours, j ai recu dabord une série de formulaire remplis vers 2-3heures du mat, puis vers 5h du mat les formulaires vides. j'ai vérifié et c etait des variables simples, je les ai passé en $_POST et plus de formulaires envoyés
 
WRInaute impliqué
Bonsoir,
J'ai eu ce probleme aussi avec un site alors j'ai mis une question qui change tous les jours voici un exemple :

Quelle est la couleur du cheval blanc de M6 ?

ça permet aussi de filter les emails envoyé pas des **** :lol:

@+
 
WRInaute occasionnel
simpson a dit:
En PHP, avec la librairie GD, tu peux créer des images à la volée.

Fais une recherche sur "PHP GD image confirmation formulaire" ou quelque chose du genre et tu devrais trouver un script que tu pourra adapter à ton site.

les images contenant du texte déformé, que seuls des yeux humains arrivent à lire (on avait déja polémiqué il y a quelques temps à ce sujet), s'appellent des "captcha"

tu dois pouvoir trouver de quoi gérer ça simplement, en cherchant sur google
 
WRInaute occasionnel
amazigh25 a dit:
Bonsoir,
J'ai eu ce probleme aussi avec un site alors j'ai mis une question qui change tous les jours voici un exemple :

Quelle est la couleur du cheval blanc de M6 ?
@+

Excellent !! Plus simple qu'un système de gif contenant un mot à recopier !
 
WRInaute discret
e-kiwi a dit:
simpson a dit:
En PHP, avec la librairie GD, tu peux créer des images à la volée.

Fais une recherche sur "PHP GD image confirmation formulaire" ou quelque chose du genre et tu devrais trouver un script que tu pourra adapter à ton site.

ta méthode n est pas bonne. image ou pas image, le robot recupere l action du formualire et va directement à la page d envoit du mail, donc il s en fiche qu'il y ai une image ou non :)

ca ne reglera absolument pas le probleme de AW

Essaie donc d'outrepasser le captcha code (merci didier_s) de ce formulaire
de géolocalisation par adresse IP et tourne 3 fois ta souris sur son tapis avant d'écrire des âneries !
 
WRInaute passionné
le problème c'est reproduit.....
il n'y a aps d'autres solutions que le captcha code?

Je suis en train d'essayer de voir si je peux verifier que la personne a été sur une page du site avant d'aller sur le formulaire.
 
Nouveau WRInaute
J'ai eu le même problème, j'en ai parlé sur ce message :
https://www.webrankinfo.com/forum/t/formail-hacke.35549/

Il se sert de plusieurs adresses mails et il revient plusieurs fois par jour pour certain, apparement ce serait un robot qui test les failles de ton formulaire de contact par "Injection d headers dans la fonction mail"
Si il y a une faille il va spammer à partir de ton site qui servira de relais, tu risques donc d'avoir des plaintes contre toi de gens qui ont été spammé.

Sur ce site il parle du phénomène :
http://www.anders.com/cms/75

J'ai contacté le service abuse d'aol et je t'invite à le faire aussi : CGUFrance@aol.com

Il faut donc que tu sécurises ton script, en attendant tu peux laisser un simple mailto:tonadresse@tonurl.com avec un email provisoir.
 
WRInaute discret
Solution ?

Hello,

J'ai ajouté un petit code dans ma page PHP envoyant le formulaire.

Déjà j'ai supprimé tous les retours à la ligne de mon message.
Puis j'ai ajouté ce code :

Code:
if (eregi("\r",$from) || eregi("\n",$from)){
	die("Un problème est survenu.");
}
elseif (eregi("\r",$to) || eregi("\n",$to)){
	die("Un problème est survenu.");
}
elseif (eregi("\r",$subject) || eregi("\n",$subject)){
	die("Un problème est survenu.");
}
elseif (eregi("\r",$message) || eregi("\n",$message)){
	die("Un problème est survenu.");
}

A priori il n'est pas repassé depuis.

En fait il utilise une faille de la fonction mail il ajoute
Code:
\r\n
dans un des champs et cela lui permet d'ajouter des destinataires. Enfin, c'est ce que j'ai compris sur les sites qui en parlent.

Dis moi si ce bout de code fonctionne aussi pour toi.

Je touche du bois, de la peau de singe, j'ai acheté une patte de lapin....
Sandrine
 
WRInaute passionné
le probleme c'est que \r et \n ça risque de poser des problemes avec mes formulaires, il suffit que l'internaute face un retour à la ligne dans un textearea et c'est foutu....
 
WRInaute discret
Bis

Pour ca je supprime les \r et \n du message de mon internaute.

Code:
// message internaute
if ( $_POST['messageInternaute'] ) {
$messageI = $_POST['messageInternaute'];	
$messageI = ereg_replace("(\r\n)|(\n)|(\r)", "", $messageI);
}

Bon niveau mise en page, ca en perd mais c'est tellement mieux sans les SPAM ! :wink:

Sandrine
 
WRInaute passionné
le probleme c'est que c'est pas pratique pour la mise ne page du formulaire.

Et quelque chose comme ça??:
Code:
$message = ereg_replace("(\n|\r|\r\n)", "<br>", htmlentities($message_final));
 
WRInaute discret
nl2br

Si tu souhaites remplacer tous les \r\n d'un message tu peux faire $messageInternaute = nl2br($messageInternaute)

Il va remplacer tous les \r\n par des <BR>

Mais j'ai essayé et il ne doit pas tous les supprimer car le test :
if (eregi("\r",$message) || eregi("\n",$message)){
die("Un problème est survenu.");
}
fonctionne et empêche d'aller plus loin.

Le mieux que j'ai trouvé et de supprimer tous ces sauts de ligne. Pour moi c'est pas trop gênant car il s'agit de mail que nous recevons. S'ils sont rédigés au kilomètre c'est pas grave. C'est sans doute plus gênant si tu envois un mail automatique à un client suite à une inscription sur une newsletter par exemple.

Sandrine
 
WRInaute discret
Ce qui est plus gênant c'est de savoir que cela signifie que ton formulaire est utilisé pour faire du spam massif...

Cf le site php.net sur la fonction mail :

Header injection is a very real, common threat in which an attacker uses your mail form to send mail to whomever he chooses! I've been hit, myself, and on a website with relatively little traffic! Read more about it here:

http://securephp.damonkohler.com/index.php/Email_Injection

Après c'est le choix entre la sécurité et la mise en page....
 
WRInaute impliqué
amazigh25 a dit:
Bonsoir,
J'ai eu ce probleme aussi avec un site alors j'ai mis une question qui change tous les jours voici un exemple :

Quelle est la couleur du cheval blanc de M6 ?

ça permet aussi de filter les emails envoyé pas des **** :lol:

@+

Mon idée n'est pas bonne.
 
WRInaute passionné
sisi bien sur mais dans mon cas je ne peux pas l'utiliser...

@modo >> penible ces 3 posts différents
 
T
tonnelle
Guest
Bonjour

Je suis maheureusement, confrontée au même problème (flood de formulaire) et je ne sais plus quoi faire.... :(
j'ai 2 formulaires piratés : l'un sur un site dont je ne m'occupe plus... j'étais en copie cachée, j'ai modifié le formulaire (viré mon mail) il y a 2 jours mais je continue à recevoir des mails...
l'autre formulaire, sur un site que je gère, je suis également en copie cachée.
- j'ai commencé par enlevé tout les \n... je recevais toujours.
- j'ai remplacé mon formulaire (je me suis servie du post de ckarone pour un formulaire plus restrictif : http://ppan.net/webdev/contact.php) : toujours floodé...
- sur les conseils de l'hébergeur, j'ai modifié le chemin (mon formulaire est maintenant dans un dossier) : pas d'amélioration...

j'ai lu qq part, que le hacker, récupérait la page de formulaire et qu'il l'utilisait en fait en local pour envoyer, via son robot, les mails.... j'avoue que tout ca me dépasse un peu.... si j'essaye de comprendre, je me dis que, quoi que je fasse pour sécuriser mon formulaire, je n'ai plus aucun recours. Suis je dans le vrai ?

merci pour vos réponses
cilou
 
T
tonnelle
Guest
merci :)
je n'avais pas vu qu'il y avait de nouveaux posts sur le sujet "formail haké"....mais j'avoue :oops: que l'anglais c'est pas trop mon truc... et le php, ben... pareil...
comme je me suis servie du script http://ppan.net/webdev/contact.php il y a plein de vérifs... j'ai bien cherché où mettre le morceau de code, mais je ne trouve pas...
Code:
$from=$_POST["expediteur"]; 

le code suivant : 


if (eregi("\r",$from) || eregi("\n",$from)){ 
die("Why ?? :("); 
}
 
WRInaute passionné
if (!eregi("\r",$_POST['nom']) && !eregi("\n",$_POST['nom']) && !eregi("@",$_POST['nom'])
{

# envoi du mail
if (@mail($destinataire,stripslashes($objet),stripslashes($message_final),$headers)) {
/*
Si l'on veut s'affranchir du message de confirmation mais tout de
même signaler l'envoi correct, activer la ligne ci-dessous en
redirigeant vers une page au choix, en traitant $_GET['mailOK']
pour afficher un message de confirmation (dans un coin de page)
*/
# @header('Location: index.php?mailOK=1');
$pageName = "Le mail a été envoyé !"; // inutile si @header()
}
}
else {
$pageName = "Echec de l'envoi !";
$erreur = "Merci d'essayer encore SVP";
}

C'est pas trés propre mais la va vite c'est ça
 
T
tonnelle
Guest
je me suis réjouie trop vite...
j'ai ce message d'erreur
Code:
Parse error: parse error, unexpected '{' in /home/httpd/vhosts/asadrome.com/httpdocs/contact/contact.php on line 101

j'ai bien positionné } avant le else... puis un peu de partout après... mais sans résultats...
je sais... :oops: j'ai vraiment des lacunes...
 
WRInaute occasionnel
j'ai le meme soucis sur mon site (pas celui dans www) ou j'ai une tribune libre et par moment on vois ces tentatifs d'email qui sont envoyé en bloc... 4,5 voir plus d'un coup avec en plus un @mon_nom_de_domaine_a_moi_com ...

quelqu'un aurais trouvé peux etre un list a blacklister coté referer par exemple ?
 
T
tonnelle
Guest
Bonjour

désolée, je ne vais pas pouvoir t'aider :(
par contre un grand merci à AW, je ne reçois plus de mails floodés... il manquait une parenthèse à la fin de la ligne du if.
donc cette technique marche :)
 
WRInaute occasionnel
Une solution

C'est effectivement un problème d'injection Header mail()

Pour ma part, à cause de cela, OVH m'a coupé plusieures fois mon accès http ! Je ne vais pas entrer dans les détails, mais je m'apprete à changer d'hebergeur. OVH n'est vraiment pas sérieux.

En tout cas, j'ai réglé le problème d'injection avec le script suivant :

Code:
// Test tous les champs de formulaire via methode POST
foreach($_POST as $field => $input) {
  $input = stripslashes($input);
  if(preg_match('/Content-Type: multipart\/mixed/i', $input)) $attack++;
  if($field != 'body') {
    if(preg_match('/\n/', $input)) $attack++;
    if(preg_match('/\r/', $input))  $attack++;  
  }
}

if($attack) {  
  $deny = '# ' . date("D M j G:i:s T Y") . "\n";
  $deny .= 'Deny from ' . $_SERVER['REMOTE_ADDR'] . "\n";
  fwrite(fopen('.htaccess', 'a'),$deny);  
  print "You've been detected trying to do stream injection and blocked from further access to this mail form.";  
  exit;
}

Voilà. En espérant que cela soit utile.
 
Discussions similaires
Haut