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 :

  1. 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.
  2. 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'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.
    Insérer une redirection vers la page contenant le formulaire est une technique plutôt efficace : les robots, pour de bonnes raisons, n'acceptent pas, pour au moins un tiers, d'être redirigés quand le nom de domaine ne change pas, presque tous quand il change.
    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.
  3. 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 :

ici si javascript est activé

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 :

hautHaut de la page

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 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.

hautHaut de la page

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.

hautHaut de la page

Encodeur d'adresse en ligne

Texte à afficher :
Adresse à encoder :
@
Code à copier et à coller :

Entrez une adresse à encoder

Cliquez sur Encoder

Le code à copier s'affichera ici


hautHaut de la page

Encoder des adresses

Si vous avez plusieurs adresses à encoder, il est plus pratique d'utiliser une fonction javascript.

Si un alignement s'impose, il suffit d'effectuer quelques modifications et d'utiliser un tableau :


hautHaut de la page

Avec javascript

W3C XHTML 1.0
W3C CSS