Page 1 sur 4
Affichage d'une adresse mail, solution anti-spam tout en php
Posté : 16 janv. 2007, 17:04
par Orbi
Bonjour,
Je cherche depuis quelques jours une solution développée uniquement HMTL/PHP (En gros sans JS) qui me permettrait d'afficher des adresses mails (récupéré dans une DB) dans une page mais qui empêcherait les robots de recherche d'adresse de récupérer ces adresses.
Et le tout avec des balises mailto et pas des formulaires d'envoie de mail.
Voilà, si quelqu'un pouvait m’aider, une piste de recherche ou n’importe quoi….
Merci à vous
Posté : 16 janv. 2007, 17:48
par Jules Petibidon
hello,
te dire que c'est completement impossible, ca te rend service ?

Posté : 16 janv. 2007, 17:55
par Hubert Roksor
Comme le dit Jules, c'est impossible. Si un navigateur sait qu'un lien est une adresse email alors un robot le saura aussi. Néanmoins, tu peux toujours essayer de leur rendre la tâche le plus difficile possible. Regarde du côté de
ce topic, c'est à peu près le mieux que tu pourras obtenir.
Edit: En y réfléchissant, on doit pouvoir leur compliquer encore un peu la tâche en ajoutant des caractères invisibles au milieu de l'adresse, par exemple pour l'adresse
[email protected]
Posté : 16 janv. 2007, 20:44
par Hywan
Bonsoir,
en revanche pour les personnes utilisant des navigateurs texte (je pense évidement à lynx en premier), mais aussi pour d'autre navigateur/programme pour "handicapés", qui ne supporte pas CSS, on va voir un "lol" placé en plein au milieu de l'adresse

ca va être très malin ...
donc on oublie cette hypothèse tout de suite

sinon jvais me fâcher tout rouge ^^
Posté : 16 janv. 2007, 21:18
par Hubert Roksor
Au pire, je conseillerais d'utiliser quelque chose d'évident comme ".retirezmoi." mais je doute que beaucoup d'utilisateurs de lynx visitent le site d'Orbi. Quant aux navigateurs pour malvoyants, à ma connaissance ils sont sensés interpréter le CSS pour leur affichage, mais la dernière fois que j'ai voulu en installer un il a voulu modifier trop de choses dans mon système pour que je puisse le vérifier par moi-même. Si tu as des liens intéressants, ils sont les bienvenus.
Posté : 16 janv. 2007, 23:49
par Invité
je n'ai pas de lien hélas
mais c'est toujours mieux d'avoir un système fonctionnel dans le cas où l'on a ni javascript, ni css

enfin c'est mon avis
pour les liens, je peux demander sur alsacreations si vous voulez ?
Posté : 17 janv. 2007, 12:33
par Hywan
niarf, désolé j'ai oublié de me loger
le message précédent est de moi

Posté : 17 janv. 2007, 14:04
par Orbi
Merci à tous.
Je vais lâchement abandonner les pauvres navigateurs sans JS pour privilégier un affichage correcte des adresses et un peut de sécurité.
Est-ce que vous pensez que le lien que ma donnée Hubert Roksor offre une solution efficace au niveau des robots ?
Car l'adresse est juste coupée en deux par des balises HTLM, ce qui ne doit pas être dur à reconstitué non ?
Posté : 17 janv. 2007, 14:19
par Hubert Roksor
Si tu sais ce que tu cherches alors non, rien de plus facile. Mais comme on disait plus haut il n'existe aucune solution parfaite.
La bonne nouvelle, c'est que les robots qui font ce genre de boulots sont généralement assez simples (c'est un hypothèse basée sur le peu que j'ai pu voir/constater) et ne vont pas jusqu'à interpréter le HTML. En fait, pour tout ce que je sais, je pense qu'ils se contentent de faire passer la page par une expression régulière de type
/[\w\.]+@[\w\.].
Pour info, la solution que je propose dans l'autre thread se dégrade plutôt bien sans javascript dans la mesure où l'adresse reste lisible même si le lien ne pointe pas dessus.
@HyWaN: si tu peux trouver des références vers une vraie façon de tester ses pages pour les screenreaders alors volontiers, merci

Posté : 17 janv. 2007, 18:44
par Hywan
Bonjour,
il y a bien delorie pour voir un navigateur text.
Et sinon je vais me renseigner auprès d'Alsacréations avec plaisir
Mais sinon, pourquoi ne pas faire : nick_AT_domain_DOT_tdl ?
Posté : 18 janv. 2007, 02:54
par Xenon_54
Posté : 18 janv. 2007, 17:40
par Victor BRITO
La règle CSS "display: none" est interprétée par la plupart des synthétiseurs vocaux. Voir à ce sujet cet
article: même s'il traite du remplacement d'images, il n'en est pas moins intéressant.
Une autre solution idéale consiste à ne jamais afficher, même en simple texte sans lien, l'adresse électronique telle quelle. Mais, pour le contact, il faudra passer par le formulaire en PHP (tout en prenant garde aux injections d'en-tête), n'en déplaise à Orbi.
Quant au JavaScript, les robots l'ignorent. Donc la solution en JavaScript n'est pas l'idéal, à mon avis.
Quant à coder l'adresse en mail%40domaine.com, j'ignore si l'efficacité dans la lutte anti-spam est au rendez-vous.
La solution de Xenon_54 est une bonne idée également.
Posté : 18 janv. 2007, 19:15
par naholyr
Note qu'on peut aussi utiliser &#code-ascii; pour remplacer un caractère. Cela peut être intéressant d'en jouer un peu, pour le coup ça reste totalement compatible, et ça pourra déjà dérouter les robots les moins performants.
Posté : 18 janv. 2007, 19:38
par Hubert Roksor
Une idée parmis tant d'autres, on pourrait imaginer d'utiliser un script qui recevrait l'adresse email plus ou moins chiffrée ou offusquée et qui en retour génèrerait le meta-tag (ou en-tête) Refresh vers le mailto: qui va bien. Par exemple (sauvegardez dans un nouveau fichier "test.php" puis affichez la page dans votre navigateur)
if (empty($_SERVER['QUERY_STRING']))
{
die('<a href="test.php?' . urlencode(str_rot13('[email protected]?subject=TEST')) . '">click</a>');
}
header('Refresh: 0;url="mailto:' . urlencode(str_rot13($_SERVER['QUERY_STRING'])) . '"');
Posté : 19 janv. 2007, 01:05
par jojolapine
je trouve ton idée vraiment intéressante
hubert !
je croit qu'il y a un petit soucis cependant, il faut intervertir url_encode et str_rot13 dans le header (je crois hein...)
voilà ce que j'ai fait en rajoutant deux petites fonctions pour le fun:
<?php
function cesar_crypt($str,$pas=12){
$temp='';
for($i=0;$i<strlen($str);$i++){
$temp.=chr(ord($str{$i})+$pas);
}
return $temp;
}
function cesar_decrypt($str,$pas=12){
$temp='';
for($i=0;$i<strlen($str);$i++){
$temp.=chr(ord($str{$i})-$pas);
}
return $temp;
}
if (empty($_SERVER['QUERY_STRING']))
{
die('<a href="essai.php?' . urlencode(cesar_crypt('[email protected]?subject=TEST',34)) . '">click</a>');
}
header('Refresh: 0;url="mailto:' . cesar_decrypt(urldecode($_SERVER['QUERY_STRING']),34) . '"');
?>
après si on utilise mcrypt, ça peut devenir infaillible... (à mois que les robots se mettent à cliquer sur les liens

)