Utrudnianie robotomi sieciowym scrapowanie adresu e-mail z naszej strony

Spam staje się coraz większą zmorą wszystkich internautów korzystających z poczty elektronicznej. Szczególnie dokuczliwy jest dla webmasterów, których stawia przed problemem jak bez narażania się na zasypanie stosami niechcianych e-maili, nie tylko zorganizowa? kontakt z użytkownikiem ale i zabezpieczyć maile odwiedzających pozostawione w przeróżnej formie na forach, księgach gości i tym podobnych.

Najlepszym znanym mi sposobem jest umieszczenie prostego formularza kontaktowego, gdzie adres odbiorcy nie jest widoczny po stronie klienta, przez co niemiłe nam roboty przeczesujące zasoby sieciowe w poszukiwaniu adresów e-mail, odchodzą z takiej strony z kwitkiem.

Co jednak gdy umieszczenie adresu e-mail na stronie staje się konieczne? Pomóc powinna poniższa funkcja, która zamienia wszystkie znaki w ciągu na encje numeryczne. Warto wiedzieć, że przed wyświetleniem przeglądarki automatycznie konwertują je na odpowiednie znaki.

function antispam($str) {
  $converted_str = '';
  for ($i = 0,$count = strlen($str); $i<$count; $i++) {
    $converted_str .= '&#'.ord(substr($str, $i, 1)).';';
  }
  return $converted_str;
}

Przykład użycia

$email =' user@jakiserwer.pl';
echo ''. antispam($email).'';

Należy pamiętać aby zawsze kodować "mailto:", ponieważ wiele robotów jest na niego wyczulonych.
Dla tych, którzy walczą o każdy bajt wynikowej strony, proponuję ograniczyć konwersję do wspomnianego przed chwilą "mailto:", małpy (@) i kropek.

Uwaga!

Podane zabezpieczenie, tzn notacja "Html-entity" w żaden sposób nie ukrywa naszego adresu e-mail przed botem, ponieważ to nie możliwe. Bot to taki sam użytkownik naszej strony jak zwykły odwiedzający. Podane rozwiązanie polega jedynie na lenistwie osób tworzących takie boty; z uwagi na to że być może wybiorą prostsze rozwiązanie wyszuakania w kodzie strony słów mailto: albo wyrażenia regularnego pasujacego do adresu e-mail; niż zaimplementować to poprawnie, tak żeby bot rozumiał encje HTML.

Alternatywne rozwiązanie

Najlepszym rozwiązaniem w tej sytuacji byłoby albo nie podawanie swojego adresu e-mail na stronie; albo założenie dedykowanej skrzynki odbiorczej specjalne na cele formularza kontaktowego. W ten sposób zostaniemy zaspamieni tylko na tej specjalnej skrzynce, którą dodatkowo można wyposażyć w dobry filtr anty-spamowy.

5 komentarzy

To jest stary sposób, dawno rozgryziony przez roboty :) Polecam js

<script>   
var   s=   "mail",   m='@',   d='domena.pl';
document.write(s+m+d);
</script>

Oddzielenie od siebie nazw. można tez to zaszyfrowac

<script>
<!--
document.write(unescape("%20%3Cscript%3E%0Avar%20s%3D%20%22mail%22%2C%20m%3D%27%26%2364%3B%27%2C%20d%3D%27domena.pl%27%3B%0Adocument.write%28s+m+d%29%3B%0A%3C/script%3E"));
//-->
</script>

sopel82: A to juz troche stara strona. Kazdy, jak tworzy bota do spamu to tworzy czarna liste z www. A po 2 to jesli juz w nazwie linku jest spam to roboty odstrasza odrazu :) . polecam samemu zrobic takie pułapki .

apropo spamu, ostatnio znalazlem bardzo ciekawa strone (pulapke na roboty spamowe) : www.spampoison.com

co do javascriptu to porada jest przeciez w dziale Server-side ;-) jednak celowo o nim nie wspomnialem poniewaz jak wiemy JS mozna wylaczyc + moze dzialac roznie w roznych przegladarkach. wedlug mnie, kodowanie na encje numeryczne wydaje sie byc najlepszym sposobem, jeśli chcemy miec link postaci <a href="mailto:mail">mail</a>

Marooned: nie tylko to jest do zmiany... :]

Jeśli ktoś nie ma dostępu do języków server-side na danym serwerze, to można użyć JavaScript - to też powinien uwzględniać ten artykuł. Sposobów jest wiele...

P.S.
Trzeba koniecznie zmienić system wyświetlania e-maili w całym 4p - szczególnie na stronach pomocy i opisu Coyote - na support@4p i webmaster@4p przychodzi tona spamu :[