Comment crypter son adresse électronique
Si vous voulez que votre adresse électronique apparaisse sur une des pages de ce wiki (la page à votre nom par exemple) il est préférable de ne pas la mettre en clair, pour éviter qu'elle ne soit lisible par un de ces innombrables robots qui parcourent inlassablement la Toile pour collecter automatiquement les adresses électroniques à des fins commerciales ou inavouables (c'est-à-dire pour vous spammer ensuite). L'astuce consiste à ne pas écrire quelque chose comme VOTRE.ADRESSE@DOMAINE.EXT directement, mais à écrire à la place un petit programme
JavaScript qui, à partir d'informations cryptées, saura réafficher votre adresse en clair. C'est-à-dire en clair pour un être humain qui regarde son écran, mais indéchiffrable pour un robot qui lui ne sait que lire l'HTML de la page, sans interpréter les programmes
JavaScript qui s'y trouvent.
Procédure à suivre :
- <a href="mailto:VOTRE.ADRESSE@DOMAINE.EXT">PRENOM NOM</a>
- cliquez sur "Encryptez"
- cliquez sur "Sélectionnez"
- copiez tout le code Javascript et collez-le sur votre page du site en mode édition, là où vous voulez faire apparaître votre adresse électronique.
Malheureusement, le code que la CNIL a généré pour vous doit être un peu modifié pour fonctionner ici :
- tout au début, remplacez par
- ... sans oublier à chaque fois les doubles-guillemets
- cherchez les deux endroits à l'intérieur du bloc où il y a aussi des doubles-guillemets ( " " ) et remplacez-les par des doubles-apostrophes ( ' ' )
Voilà, vérifiez avec un "Aperçu". Vous devez voir apparaître un lien PRENOM NOM. En cliquant dessus, vous fabriquerez un message à envoyer à VOTRE.ADRESSE@DOMAINE.EXT
Et pour afficher votre adresse électronique directement, remplacer l'exemple ci-dessus par le suivant :
- <a href="mailto:VOTRE.ADRESSE@DOMAINE.EXT">VOTRE.ADRESSE@DOMAINE.EXT</a>
vous ferez alors apparaître un lien VOTRE.ADRESSE@DOMAINE.EXT
Je pense que les solutions basées sur JS ou n'importe quel langage s'exécutant du côté du client sont à exclure, étant donné que si un navigateur est capable de l'exécuter, un robot est capable de tout autant... --
LordFarquaad
Discussions
Solution à base d'image
Je viens de découvrir une solution originale pour modifier son adresse électronique afin de la cacher des robots collecteurs. Il s'agit tout simplement de remplacer le caractère "@" par une image... Cette solution est visible sur la page suivante :
http://wiki.crao.net/index.php/Fran%E7oisParmentier.
Je pense qu'elle peut être aisément mise en oeuvre ici même. Si on souhaite renforcer le "cryptage" (qui n'en est pas tout à fait un) il suffit de remplacer d'autres caractères par leurs images équivalentes.
Avantages :
- solution simple à mettre en oeuvre
- protège de facto toutes les adresses électroniques (ce qui permet de publier sans problème éventuellement d'autres adresses que la sienne)
Inconvénients :
- consomme un petit peu de temps (négligeable)
- le copier/coller devient impossible
- cette solution n'est pas accessible aux aveugles ou aux navigateurs textes à moins d'indiquer "arobase" dans l'attribut "alt" (mais cela fragilise alors la solution) ; cet inconvénient me paraît assez important
--
CharlesNepote
Personnellement je pencherai plus en faveur d'une solution utilisant des images. Celles-ci pourraient être générées et mémorisées dans un dossier de cache spécifique aux images pour les e-mails.
--
PatrickPaul
Solution à base d'un formulaire (POST)
Une autre solution à envisager est celle de masquer l'adresse derrière un formulaire envoyé via la méthode "POST".
Cette solution est présentée ici :
--
CharlesNepote
- Il y a maintenant deux actions dans les contributions clés en main qui permettent d'envoyer des courriels grâce à un formulaire post :
- OlivierB
- Ma préférence va clairement à ce type de solution, bien que les spammeurs soient capables bien souvent de remplir les formulaires... Au moins on a la certitude qu'ils n'auront pas l'adresse. L'important est de bien préciser dans le mail "qui" l'a envoyé (à savoir tel utilisateur avec tel ip depuis telle page sur tel wiki, parce que le destinataire y est inscrit - et la possibilité de désactiver l'envoi de mails) -- LordFarquaad
L'idée et de générer aléatoirement des champs non utilisés, ainsi que le nom des champs, utilisés ou non (je n'ai pas pu mettre ce texte en commentaire de la page : trop de liens) --
AlexandreF
- Aaaah ! Mais c'est ça que je cherchais justement pour appuyer ma thèse du "JS = pas une solution". J'avais lu cet article aussi, très intéressant en effet, et dans les commentaires on trouve "récapitulatif" du problème. -- LordFarquaad PS.: et en plus ce cher Ploum est inscrit sur WikiNi: PloumPloum
Solution (toute faite) à base d'un formulaire (POST)
Pour compléter ce qui est présenté ci-dessus et apporter un peu plus d'aide à ceux que la langue anglaise rebute je propose ceci qui pourra bien sûr être amélioré :
- dans un premier temps il faut créer une page wikini nommée par exemple EnvoyezCourriel? et copier/coller le code du formulaire ci-dessous (copiez les doubles guillemets de début de fin du formulaire):
- puis il suffit de copier le code ci-dessous dans une page texte nommée "envoimail.php3" et la placer par ftp sur votre serveur :
<?
$to = "nom@xxxxx.org";
$headers = "From: Message <webmaster@nomsite.org>\n";
$mon_email = "nom@xxxxx.org";
$sujet = "Message depuis (nom de votre site) \n";
$emailbody = "$emailexped\n";
$emailbody .= "$speudo;$ip\n\n";
$emailbody .= "$titre\n\n";
$emailbody .= "$message\n";
$param = "-f $mon_email";
mail($to, $sujet, $emailbody, $headers, $param);
echo "
<html><head>
<meta http-equiv=\"Refresh\" content=\"2;URL=http://ADRESSE.PAGE.ACCUEIL.SITE\">
</head>
<body>
<table wight=\"500\" align=\"center\"><tr><td>
<br><br><br><br>
Le message a été envoyé.<br>
<br>
Vous allez être redirigé vers l'accueil du site.<br><br>
Merci.<br>
L'équipe.<br>
</td></td></table>
</body></html>";
?>
--Michel
[David VANTYGHEM] Le challenge est de rendre visible l'adresse mél à un être humain et à un lecteur pour personne malvoyante et de la rendre invisible ou incompréhensible aux robots collecteurs d'adresses mél.
On peut conditionner l'affichage de l'adresse à une action humaine qu'un robot ne peut faire. Par exemple :
- en posant une question dont la réponse est évidente sauf pour un robot (quel est le nombre affiché, la couleur etc.)
- en demandant de sélectionner plusieurs liens successivement dans un ordre bien particulier (comme le jeu SIMON)
- Je ne vois pas bien comment cela fonctionnerait (malgré que je connaisse le jeu SIMON...). On dirait "suivez dans l'ordre tel lien, tel autre lien et ensuite tel lien" et l'utilisateur doit le faire ? Cela me paraîtrait fort contre productif non ? -- LordFarquaad
- en demandant de sélectionner un lien à un moment bien précis (contrainte temporelle)
- Difficile à mettre en oeuvre ÀMHA: comment l'utilisateur saura-t-il quel est le bon moment ? Et s'il le "loupe" ? Quoi qu'il en soit cela occasionnerait une perte de temps -- LordFarquaad
- etc.
Solution Javascript
Plein de solutions sont possibles. Une avec uri_escape :
<?
function encryptEmail($email, $string = '') {
// if the string is empty, use the e-mail address:
if ($string == '') {
$string = $email;
}
// the JavaScript code to print the HTML:
// (putting newlines into $code seems to mess up the encoding, so don't)
$enc_email = uri_escape($email);
$enc_str = uri_escape($string);
$code = "var addr = '$enc_email';" .
"var string = '$enc_str';" .
"document.write('<a href=\"mailto:' + unescape(addr) + '\">' + unescape(string) + '</a>');";
// encode the JavaScript code:
$encoded = uri_escape($code);
// generate stuff to go inside <noscript></noscript> tags:
if (strtolower($string) == strtolower($email)) {
$noscript = "(e-mail cachée)";
} else {
$noscript = $string;
}
// print the JavaScript which prints the JavaScript which prints the HTML:
return "<script language=\"JavaScript\" type=\"text/javascript\">" .
"eval(unescape('$encoded'));" .
"</script>" .
"<noscript>$noscript</noscript>";
return true;
}
?>
--
AlexandreF
- Comme je l'ai dit plus haut, une solution en JavaScript n'est pas une solution mais une illusion: le robot n'a qu'à exécuter le javascript et il obtient l'adresse... Ça en arrêtera sans doute certains, mais il y en aura qui passeront outre... Et ça ne marche pas pour ceux qui désactivent JS. -- LordFarquaad
- (j'ai déplacé la solution entitées plus bas). Je suis d'accord que ca ne marche pas pour ceux qui désactive le JS. Mais je pense qu'il y a peu de bots qui exécute le JS : ça fait plus d'un an que j'ai mon email yahoo sur cette page http://wow.tartiflette.free.fr/?wiki=Dalf et je n'ai pas encore eu un seul spam. L'astuce dans le code que je propose ce que la balise <a href...> est aussi écrite par JS, donc le bot ne peut pas deviner que le JS affiche une email à moins de l'exécuter. Note : ce code est un copier/coller adapté mais je ne retrouve plus le crédit. -- AlexandreF
- En fait je pense que ça marche à petite échelle, pour une utilisation isolée (tant que les bots ne se mettent pas à exécuter tous les JS). Seulement pour une utilisation massive (IE.: un site entier ou même tous les sites utilisant un même programme), ça ne marchera pas: le spammeur va consulter le site, voir quelle est la protection en place et dire à son bot comment trouver les adresses. Dans ton exemple c'est très simple:
- trouver eval(unsecape('$encoded')); (en remplaçant $encoded par une regexp)
- échapper le $encoded qu'on vient de trouver
- trouver dans le texte échappé var addr = '$enc_email'; (en remplaçant $enc_email par une regexp)
- échapper $enc_email => on a l'adresse ! Et le bot n'a même pas eu besoin d'exécuter le JS...
Voir la
CategorieSpam?.