Formulaire avec un anti spam pour site asso

Messages postés
4
Date d'inscription
mercredi 11 septembre 2019
Statut
Membre
Dernière intervention
15 septembre 2019
-
Bonjour,
Je ne suis pas très pointu en programmation. J'ai fait un site pour une association dont je suis membre en utilisant un kit d'un petit site responsive hébergé chez free. J'ai voulu y ajouter un formulaire (du site Webd) et jusque là tout va bien.

Mais depuis 1 mois on reçoit chaque jour entre 60 à 80 mails de spam. J'ai fait le tour sur internet, je sais que ce pb revient régulièrement mais j'ai du mal à trouver une solution qui puisse fonctionner chez free. Il existe des solutions très techniques semble-t'il en PHP mais bon je ne suis pas un pro et c'est pas simple, tout ça pour un simple formulaire.

Voici le script de mon formulaire :


<div class="row">
<div class="col g-7">
<form action="http://w2.webreseau.com/fr/services/FormToEmail/FormToEmail2.asp" ENCTYPE="multipart/form-data" method="POST">
<input type="hidden" name="_id" value="84784454555">
<input name="_subject" type="hidden" value="Commentaires fr">
<input name="_requiredFields" type="hidden" value="Sujet,Nom,Courriel,Message">
<input name="_userinfo" type="hidden" value="1"><!-- IP -->
<input name="_replyToField" type="hidden" value="Email"><!-- répondre à -->
<input name="_redirect" type="hidden" value="http://www.mon-site.com/fr-v.html#contact">
<fieldset>
<div>
<label for="contactName">Nom, Prénom</label>
<input name="nom" type="text" id="contactName" size="35" required="required" >
</div>
<div>
<label for="contactEmail">Courriel</label>
<input name="courriel" type="text" id="contactEmail" size="35" required="required" >
</div>
<div>
<label for="contactSubject">Sujet </label>
<input name="sujet" type="text" id="contactSubject" size="35" required="required" >
</div>
<div>
<label for="contactMessage">Message</label>
<textarea name="message" id="contactMessage" rows="15" cols="50"></textarea>
</div>
<div>
<button class="submit">Envoyer</button>
<span id="image-loader"> <img src="images/loader.gif" alt=""> </span> </div>
</fieldset>
</form>
<div id="message-warning"></div>
<div id="message-success"> <i class="icon-ok"></i>Votre message a été envoyé, merci !<br>Your message was sent, thank you!<br>
</div>
</div>


Si quelqu'un pouvait m'indiquer un bout de code à ajouter dans mon script de formulaire afin d'éloigner une partie des spam.

Merci à vous
Afficher la suite 

4 réponses

Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
1059
0
Merci
Bonsoir,

Sans PHP, tu peux essayer le captcha de Google, quoique, je ne suis pas certain qu'il soit possible de l'utiliser sans PHP : https://www.google.com/recaptcha/intro/v3.html

Sinon, il ne reste que le JavaScript.

Par exemple, de cette manière :

Il faut commencer par créer une petite image contenant 2+2= que tu appelleras code.gif et que tu placeras dans le dossier images de ton site.

Ensuite, tu ajoutes ce script dans la page du formulaire, avant le formulaire.

<script type="text/javascript">
  function verifform(formulaire)
  {
      if(formulaire.code.value != "4")
      alert('Erreur code anti-spam !');

      else
      formulaire.submit();
  }
</script>



Dans le formulaire tu ajoutes une ligne au formulaire, avant le bouton "Envoyer" :

<p>Code anti-spam <img src="images/code.gif"> <input type="text" name="code" size="1" maxlength="1"></p>



Puis, tu modifies la ligne du bouton "Envoyer" :

<button  onClick="verifform(this.form)" class="submit">Envoyer</button>



Commenter la réponse de dugenou
Messages postés
4
Date d'inscription
mercredi 11 septembre 2019
Statut
Membre
Dernière intervention
15 septembre 2019
0
Merci
J'ai modifié mon formulaire mais ça ne fonctionne pas. Si je remplis mal la case 2+2 ou si je ne la remplis pas, une fenêtre apparait pour me dire "Erreur de calcul dans la case anti-spam !", ce qui est normal mais lorsque dans cette petite fenêtre je clique sur "ok" alors ça envoie le formulaire automatiquement.

Voici le code que j'ai mis :

    <div class="col g-7">
<script type="text/javascript">
  function verifform(formulaire)
  {
      if(formulaire.code.value != "4")
      alert('Erreur de calcul dans la case anti-spam !');
      else
      formulaire.submit();
  }
</script>
      <form action="http://w2.webreseau.com/fr/services/FormToEmail/FormToEmail2.asp" ENCTYPE="multipart/form-data" method="POST">
        <input type="hidden" name="_id" value="5484984644854">
        <input name="_subject" type="hidden" value="Commentaires fr">
        <input name="_requiredFields" type="hidden" value="Sujet,Nom,Courriel,Message">
        <input name="_userinfo" type="hidden" value="1"><!-- IP -->
        <input name="_replyToField" type="hidden" value="Email"><!-- répondre à -->
        <input name="_redirect" type="hidden" value="http://www.mon-site.com/fr-v.html#contact">
        <fieldset>
          <div>
            <label for="contactName">Nom, Prénom</label>
            <input name="nom" type="text" id="contactName" size="35" required="required" >
          </div>
          <div>
            <label for="contactEmail">Courriel</label>
            <input name="courriel" type="text" id="contactEmail" size="35" required="required" >
          </div>
          <div>
            <label for="contactSubject">Sujet </label>
            <input name="sujet" type="text" id="contactSubject" size="35" required="required" >
          </div>
          <div>
            <label  for="contactMessage">Message</label>
            <textarea name="message"  id="contactMessage" rows="15" cols="50"></textarea>
          </div>
          <div>
            <label>Anti-spam<br />Calculez 2 + 2 =</label>
            <input type="text" name="code" size="1" maxlength="1">
          </div>
          <div>
            <button onClick="verifform(this.form)" class="submit">Envoyer</button>
            <span id="image-loader"> <img src="images/loader.gif" alt=""> </span> </div>
        </fieldset>
      </form>
      <div id="message-warning"></div>
      <div id="message-success"> <i class="icon-ok"></i>Votre message a été envoyé, merci !<br>Your message was sent, thank you!<br>
      </div>
    </div>


Si quelqu'un a la solution, j'avoue être perdu avec cette histoire de formulaire.
dugenou
Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
1059 -
Bonjour,

Je ne comprends pas pourquoi avec ton formulaire ça ne fonctionne pas. Le JavaScript n'est peut-être pas adapté à cette fonction.

Sur mes formulaires, je n'utilise pas ce genre de script comme captcha, mais seulement pour vérifier que les champs ne sont pas vides. Pour l'anti-spam, j'utilise le même principe du calcul très simple (2+2=4), mais la vérification est faite en PHP.

Dans ton cas, ce n'est pas possible, le fichier de traitement du formulaire se trouve chez ton prestataire.
dugenou
Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
1059 -
Bonjour,

Après quelques recherches, je pense avoir trouvé la solution. Il faut ajouter onsubmit="return false" dans l'entête du formulaire :


<script type="text/javascript">
  function verifform(formulaire)
  {
      if(formulaire.code.value != "4")
      alert('Erreur de calcul dans la case anti-spam !');
      else
      formulaire.submit();
  }
</script>
    <div class="col g-7">
     <form action="http://w2.webreseau.com/fr/services/FormToEmail/FormToEmail2.asp" ENCTYPE="multipart/form-data" method="POST" onsubmit="return false">
        <input type="hidden" name="_id" value="5484984644854">
        <input name="_subject" type="hidden" value="Commentaires fr">
        <input name="_requiredFields" type="hidden" value="Sujet,Nom,Courriel,Message">
        <input name="_userinfo" type="hidden" value="1"><!-- IP -->
        <input name="_replyToField" type="hidden" value="Email"><!-- répondre à -->
        <input name="_redirect" type="hidden" value="http://www.mon-site.com/fr-v.html#contact">
        <fieldset>
          <div>
            <label for="contactName">Nom, Prénom</label>
            <input name="nom" type="text" id="contactName" size="35" required="required" >
          </div>
          <div>
            <label for="contactEmail">Courriel</label>
            <input name="courriel" type="text" id="contactEmail" size="35" required="required" >
          </div>
          <div>
            <label for="contactSubject">Sujet </label>
            <input name="sujet" type="text" id="contactSubject" size="35" required="required" >
          </div>
          <div>
            <label  for="contactMessage">Message</label>
            <textarea name="message"  id="contactMessage" rows="15" cols="50"></textarea>
          </div>
          <div>
            <label>Anti-spam<br />Calculez 2 + 2 =</label>
            <input type="text" name="code" size="1" maxlength="1">
          </div>
          <div>
            <button onClick="verifform(this.form)" class="submit">Envoyer</button>
            <span id="image-loader"> <img src="images/loader.gif" alt=""> </span> </div>
        </fieldset>
      </form>
      <div id="message-warning"></div>
      <div id="message-success"> <i class="icon-ok"></i>Votre message a été envoyé, merci !<br>Your message was sent, thank you!<br>
      </div>
    </div>
dugenou
Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
1059 > dugenou
Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
-
Je te conseille d'utiliser une image pour afficher le calcul du captcha pour plus d'efficacité, les robots spammeurs sont capables de lire et d'interpréter beaucoup de choses :

 <label>Anti-spam<br />Calculez <img src="images/code.gif" alt="Code"></label>


L'image :
Commenter la réponse de danvon
Messages postés
4
Date d'inscription
mercredi 11 septembre 2019
Statut
Membre
Dernière intervention
15 septembre 2019
0
Merci
Bonsoir,
je viens de faire des tests et ta solution semble être la bonne. L'envoi du formulaire fonctionne bien. Maintenant reste à voir si ça a un effet sur les robots. Si déjà ça limite les 10ènes de courriel quotidiens, ce sera bien.

En tout cas merci pour ton soutien.
dugenou
Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
1059 -
Bonjour,

Très bien ! Tiens nous au courant de l'efficacité de cette solution.

Malheureusement, je ne suis pas certain qu'un anti-spam en JavaScript soit efficace contre des robots-spammeurs.
Commenter la réponse de danvon
Messages postés
4
Date d'inscription
mercredi 11 septembre 2019
Statut
Membre
Dernière intervention
15 septembre 2019
0
Merci
Bonjour Dugenou,
Tes craintes sont justifiées. L'ajout de ce JavaScript n'a strictement rien changé (même en mettant le 2 + 2 en image). J'ai lu sur internet qu'il existe des champs cachés dans les formulaires pour induire les robots en erreur mais bon je n'ai pas réussi à trouver un exemple concret de ce type de script. Le petit site de l'association est hébergé chez OVH, donc normalement le PHP devrait fonctionner. Peut être devrais-je chercher de ce coté. Je voulais éviter de rentrer dans des scripts trop complexes pour un simple formulaire mais bon je crois que je ne vais pas pouvoir y échapper.
dugenou
Messages postés
5591
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
17 septembre 2019
1059 -
Bonjour, Je ne suis pas étonné, je pense que les robots-spammeurs passent outre le JavaScript.
Le système du champ caché ne fonctionne qu'avec du PHP.
Tu trouveras très facilement de nombreux scripts de formulaires de contact en PHP. Tu pourras alors y ajouter un système de captcha ou anti-spam efficace.
Tu peux même utiliser le système du calcul et du résultat à écrire dans un champ, avec une vérification en PHP.
Commenter la réponse de danvon