Ce petit script, écrit par Spookev, est, à mon sens, une très bonne astuce anti-spam pour vos formulaires :

L'astuce est aussi simple qu'efficace : Pour remplir les formulaires, les bots détectent les champs input type="text" textearea dans le code source de la page, et remplissent ceux-ci automatiquement.
Pour être certain que le commentaire n'est pas envoyé par un robot de spam, il suffit donc de créer un champ de texte, invisible pour le visiteur (caché via la CSS), qui doit rester vide pour que le système d'envoi de commentaire valide le traitement des données =).

Avantages :
Certainement très efficace.
Discret, il évite aux utilisateur de saisir un captcha !

Inconvénients éventuels :
Coté accessibilité, il faudra faire attention au moment de l'intégration.
Pensez par exemple à ajouter un avertissement texte du style "Ce champ ne doit pas être renseigné", caché par défaut via CSS, tout comme notre champ anti spam.
Pourquoi ? Tout simplement parce-que certaines personnes naviguent avec les CSS désactivées (pour diverses raisons), et que ces personnes verraient le champ initialement caché ;).

Enjoy !

Afficher/Cacher le code

#
# Le formulaire Type en HTML (par Spookev)
#


<form action="traitement.php" name="votreForm" method="post">
<input class="ccab" name="host" type="text" value=""/> <!--VOICI LE CHAMP CACHE-->
<input class="" name="champ1" type="text" value=""/><br />
<input class="" name="champ2" type="text" value=""/><br />
<input class="" name="cham3" type="text" value=""/><br />
<input type="button" value="Envoyer" onclick="javascript:verifForm('Bien envoyé');"/> <!--N'OUBLIEZ PAS LE onclick AVEC LA FONCTION verifForm() -->
</form>


Dans votre fichier CSS, ajoutez ceci:
.ccab { display: none; }


#
# Le script de détection en JavaScript (par Spookev)
#

<script type="text/javascript">
// Il serait préférable de mettre ce script dans un fichier JS //
function verifForm(okform)
{
    if(document.forms['votreForm'].elements['host'].value == '')
    { // On teste si 'host' est vide
        alert(okform);    // Il est vide, on ouvre une alerte (ou pas, dans ce cas, commenter cette ligne)
        document.forms['votreForm'].submit(); // On envoi le formulaire, tous les champs sont remplis et
    'host' est vide
    
    }
    else
    {
        document.location='http://www.fuckspam.com/';
    // Si le champ 'host' est rempli, on redirige le robot vers un super site :D

    }
}
</script>


#
# Complémentaire : La détection via PHP (par GeekArlier)
#

<?php
if(isset($_POST['host']) && empty($_POST['host'])) //Si "host" est vide
{
     //On continue le traitement de données
}
else //Sinon
{
    //Sachant qu'on a très probablement affaire à un bot, inutile de renvoyer un message d'erreur =)
    //Vous pouvez cependant en profiter pour blacklister l'ip du robot spammeur si nécessaire...
    //Ces données peuvent également servir pour des statistiques.

}
?>
 Par : Spookev    Langage : xHtml/CSS, JavaScript, PHP    Réagir