Tutorial : Comment réaliser un anti-spam pour cacher des mails dans un site web?
par Joss, mercredi 19 décembre 2007 à 09:28 :: Tutoriels et Techniques du Web 2.0 :: #14 :: rss
Je vous propose pour mon premier post dans cette rubrique un anti-spam en Ajax.
En utilisant les propriétés d'Ajax, on peut imaginer une méthode assez simple pour cacher un mail d'un spam-bot.
En effet vu que les bots arrivent à détectent un mail dans un texte, on peut dire que les nouvelles méthodes anti-spam pour protéger le mail de vos visiteurs n'arrivent pas toutes à déjouer l'adaptabilité de ces bots.
La solution optimale serait dans ce cas de ne faire apparaitre nulle part ce mail dans du texte mais de le faire transmettre par un flux.

Anti Spam en AJAX - Mails indétéctable par un BOT
Cette méthode est réalisée en implémentant ces notions :
Le code javascript à inclure : anti_spam.js ( requêtes Ajax ) :
// Fonction qui crée un objet XMLHttpRequest
function get_request_obj()
{
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
// Fonction qui demande le mail
function get_mail() {
var verify = "NO_BOT"; // On utilise le message NO_BOT pour monter mon identité au script php
get_request_obj();
xmlHttp.onreadystatechange = get_mail_reponse;
xmlHttp.open("POST", "http://mon.site.com/anti-spam/get_mail.php", true);
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlHttp.send("mail="+verify); // Je transmet verify par post au fichier
}
// Fonction traitant le message retourné
function get_mail_reponse() {
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200) {
resultat = xmlHttp.responseText;
if (resultat!=undefined) {
var url = resultat;
// J'ouvre le mail ou la page retournéeavec javascript
window.open(url);
} else {
// Echec de la requête
alert('Etes vous un bot? J\'arrive pas à vous donner mon mail, désolé!');
}
}
}
return false;
}
Le code php : get_mail.php ( vous pouvez bien sur utiliser votre langage pour implémenter ce résultat ) :
<?php
$message = "NO_BOT"; // Message attendu du JS
$mail = "mon@mail.com"; // Je cache mon mail dans cette variable
$page_de_contact = "http://page_de_contact.com/contact.php"; // Je met une page alternative au mail au cas où le message n'est pas le bon
// si la variable mail en post existe et contient le message
if ((!empty($_POST['mail']))&&($_POST['mail']==$message)) {
echo 'mailto:'.$mail; // J'envoie le mail au js
} else { // sinon
echo $page_de_contact; // J'envoie la page alternative au js
}
?>
Le code html :
// On parametre comme évènement notre fonction get_mail().
// Vous pouvez implémenter n'importe quel bloc xhtml a la place de span bien sùr.
<span onclick="get_mail(); return false;">
Contactez moi par mail
</span>
Exemple :
Cliquez ici pour avoir mon mail.
Conclusion et archive de la solution :
On peut bien sur voir toute sorte de dérive à cette solution et l'adapter à ses besoins, comme un bloc qui se change en textfield ou div ou span avec le mail rempli dedans dès le chargement
Je vous laisse l'archive du code à consommer sans modération 














Commentaires
1. Le mardi 15 janvier 2008 à 20:13, par annie
2. Le vendredi 18 janvier 2008 à 14:40, par le chamane
3. Le vendredi 11 avril 2008 à 02:26, par gates
4. Le samedi 12 avril 2008 à 11:27, par youssef
Ajouter un commentaire