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.
To jest stary sposób, dawno rozgryziony przez roboty :) Polecam js
Oddzielenie od siebie nazw. można tez to zaszyfrowac
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 :[