Protéger l'adresse email de son site
Formulaire ou mailto encodé ?
Si quelqu'un veut vous joindre, "spammeur" ou pas, il trouvera une solution et il sera toujours temps de lui donner votre adresse email pour échanger des idées ou des fichiers. Comme des adresses email non protégées sont nombreuses sur les sites référencés, un "spammeur", avec un robot ou pas, ne devrait pas perdre son temps à trouver votre adresse si elle est protégée.
Pour protéger une adresse email, trois solutions à mon avis :
- Voir si son prestataire ne propose pas un formulaire tout prêt (c'est le cas chez free car la fonction PHP mail() est désactivée ou bridée). Ce script ne fonctionne pas si le "referrer" ("HTTP_REFERER") est faux ou bloqué et avec plusieurs navigateurs : Beonex, Off By One et certaines versions de Mozilla.
C'est la méthode utilisée par l'ancienne page de contact. Cette page est très souvent visitée par des spambots mais je ne reçois que quelques messages : un formulaire de confirmation bloque la majorité d'entre eux et free bloque presque tous les autres. - Si ce n'est pas le cas, écrire un formulaire sur le même modèle qui appelle un script PHP.
- Celui-ci ôtera tout script du message et tout caractère de contrôle.
- Il vérifiera que le "referrer" ($HTTP_REFERER) ne soit ni bloqué ni émis depuis une page extérieure au site et éventuellement que le navigateur soit identifié.
- Il transmettra le message, l'adresse IP du client, la date et l'heure du message à une page qui convertira le tout en variables de session et redirigera vers une page non-indexée qui invoquera la fonction mail().
- Et, afin de ne rien envoyer au navigateur, redirigera à l'aide du "referrer" (ou une variable de session) vers une page qui confirmera l'envoi.
Coupler redirection et script transformant les variables de formulaire en variables de session semble aussi être une technique efficace.
Un formulaire de ce type est utilisé par la page de contact et peut aussi être testé sur une page d'un projet abandonné. Cette page est souvent visitée par des spambots mais je ne reçois pas leurs messages. - Remplacer <a href="mailto:monnom@monprestataire.fr">Contact</a> facilement repérable par
Vous pouvez tester avec le lien ci-dessous ou encoder une adresse quelconque au bas de la page :
Ce qui ne marche que si javascript est activé.
PHP peut facilement générer cette routine avec des listes d'adresses (var texte="<?php echo $texte;?>"; ...)
Certains robots ne seront pas écartés : il établissent l'adresse en fonction de la méthode d'attribution du prestataire ou aléatoirement à partir du nom de domaine !
A condition d'utiliser une adresse inconnue des spammeurs, presque tous les courriers indésirables sont ainsi évités, mais il faut aussi s'attendre à recevoir beaucoup moins de messages.
Comme avec toute protection, nombreux sont ceux qui sont découragés par un problème de navigateur ou par un formulaire car il ne permet pas de préparer son texte.
Il existe d'autres solutions :
- Anti-Spam Script Maker (javascript) et ANTI-SPAM PING JPEG MAKER
- Blackman's E-mail encoder (javascript)
- SpambotDeceiver (javascript)
- E Cloaker (Unicode)
- Obfusticated Email Link Creator (Unicode)
- Safe E-mail Links Scout (javascript et fausse adresse)
- HTML-Email-Cloaker (Unicode+javascript)
- Hiding email address from spambots (solution CSS2 mais sans mailto qui ne s'affiche qu'avec Mozilla ou Opera)
- Hiding email addresses (solution CSS mais sans mailto)
- MailMe (script perl qui transmet un message du site vers votre adresse email)
- E-Mail Protector Script (script perl qui renvoie 10 000 fausses adresses aux robots identifiés)
- Vorras Antibot (pas tout à fait gratuit et si vous avez installé Python 2.0)
Demander une confirmation
Afin d'éviter les "email grabbers", spambots et l'envoi par des robots de spam au travers du formulaire, cette page du site, comme toutes les pages qui contiennent le mot "email" ou "mailto" ou "@" redirigent l'utilisateur sans "referrer", avec un "User Agent" inconnu , un hôte ou une adresse IP repérés vers une page de confirmation.
Le navigateur est testé en entrée de page. Une routine PHP comme celle qui suit redirige si nécessaire :
/*$nav retourné par la routine de détection du navigateur renvoie "autre" si le navigateur est inconnu*/
if(!isset($_REQUEST["fichier_requis"]))
{
$page_self=getenv("REQUEST_URI");
$page_referer=getenv("HTTP_REFERER");
$no_ip=getenv("REMOTE_ADDR");
$hote=gethostbyaddr($no_ip);
if (($nav=="autre" && $page_referer=="") || (preg_match("/reverse\.theplanet\./",$hote)&& $page_referer==""))
{
header("Location:confirmer.php?fichier_requis=$page_self");
die();
}
}
/*Code de la page demandée*/
En cas de confirmation, le formulaire de la page de confirmation renvoie la page demandée grâce à la variable fichier_requis.
Environ 5% des requêtes redirigées ainsi sont suivies d'une confirmation.
Rechercher l'expéditeur
Vous pouvez aussi noter l'adresse IP ou l'hôte de l'expéditeur au moment de l'envoi (rubrique "Received: from " en ouvrant l'en-tête du message avec Mozilla, avec Outlook rubrique "From :" Propriétés du message puis Détails) puis vous plaindre en trouvant l'origine du message grâce à IPNetInfo ou ADVwhois ou eXpress IP Locator bouton IP Whois.
Il existe aussi spamspade, ensemble d'outils pour identifier le spammeur (cela représente beaucoup d'efforts mais vous trouverez dans le fichier d'aide toutes les explications -en anglais uniquement- sur leurs techniques et astuces).
Pour compliquer la tâche, il semble que les virus (comme Netsky, Bagle, Zafi, Mydoom...) collectent (dans les carnets d'adresses de vos correspondants) des adresses valides pour des courriers type "spam", "phishing" ou "scam" et sont maintenant capables de modifier (spoofing) toutes les informations de l'en-tête, y compris l'adresse IP de l'expéditeur. Les quelques en-têtes que je télécharge parfois ne m'ont néanmoins pas permis de le vérifier.
Encodeur d'adresse en ligne
Entrez une adresse à encoder
Cliquez sur Encoder
Le code à copier s'affichera ici
Haut de la page