Робот

Робот


Tigir.com о web-технологиях / Статьи - Прячем email-адреса от

/* 21.04.2006 */ Крошка сын к отцу пришел, и спросила кроха: "Спаммер - это хорошо, или спаммер - плохо?". Думаю, что даже маленькие дети в "продвинутых" семьях слышали о спаме, который является результатом непосильного труда тружеников невидимого фронта. Сегодня я вам расскажу, как можно прятать email-адреса на страницах сайта от spam-роботов, безустанно шныряющих по сети в поисках новых электронных адресов. Кто не спрятался, спаммер не виноват! Спам, как вы наверняка знаете, является большой головной болью всей глобальной сети. Спам-роботы сканируют сеть и выдирают со страниц сайтов email-ы. Спаммеры радуются растущей базе адресов и зарабатывают деньги. Пользователи бояться оставлять свои адреса в форумах, гостевых ... Админы нервно настраивают спам-фильтры. Короче говоря, все при деле. Однако, такое положение вещей кроме спаммеров не устраивает никого. Что мы, как разработчики можем сделать в свою очередь, чтобы помешать этому безобразию? Мы можем представлять email-адреса в виде непонятном для спам-роботов. Спам робот, это программа, которая ищет на страницах определенную последовательность символов (и в этом её слабость), похожую на email. Конечно, спам-роботы не совсем "тупы" и обладают определенным интеллектом, что позволяет обходить некоторые виды защиты. Например, робот вполне может распознать в строке: и декодировать их в "myname@mysite.com". Но все же роботам ещё далеко до совершенства, и в частности, им пока не по зубам интерпретировать javascript-код, чем мы и воспользуемся. Напишем javascript-функцию, которая бедет печатать на странице email-адрес. Так как робот не может выполнить функцию, то и не может получить результат её выполнения - email. String.prototype.printAddr = function (_hamper,_prefix,_postfix,_face) { _hamper= _prefix+ "@"+ this+ (_postfix || '') document.write((_face||_hamper).link("mailto:"+_hamper)); } Лучше сохранить эту функцию в отдельном файле (например, hide_email.js) и вызывать на нужных страницах следующим образом: <html> <head> <script type="text/javascript" src="hide_email.js"></script> </head> <body> Связаться со мной вы можете по адресу: <script>"mysite".printAddr('любая абра-катабра', 'myname', '.com');</script> </body> </html> Ещё примеры (прячем адрес: myname@mysite.com): <script>"mysite.c".printAddr('abc', 'myname', 'om');</script> Если вы хотите чтобы в качестве текста ссылки отображался не сам email, а произвольный текст или картинка, то их следует передать четвертым параметром: <script>"mysi".printAddr('xyz', 'myname','te.com', 'Пишите'); <script>"mysi".printAddr('xyz', 'myname','te.com', '<img src="image.gif" />');</script> Данный способ на сегодняшний день весьма эффективен, однако есть один нюанс: пользователь может отключить Javascript, или браузер может его не поддерживать. Что же делать? Тут на помощь приходит тэг <noscript>...</noscript> , который отображает свое содержимое в случае, если javascript недоступен. Остается определиться с тем, что же показывать пользователю в контейнере ? Можно показать картинку с адресом, можно ссылку на страницу с объяснениями и инструкциями, что делать дальше и т.п. Я же предлагаю следующий вариант: <noscript>myn</noscript><script>"mysi".printAddr('abc', 'myname', 'te.com');</script><noscript>ame<!--blablabla--><span>&#64;</span>mysite.com</noscript> В случае когда javascript доступен, пользователь увидит нормальную ссылку на email, в противном случае будет отображен email-адрес в виде простого текста (а не ссылки). Т.е. пользователь в нашем примере увидит: myname@mysite.com Конечно же, Javascript не единственный островок антиспамового сопротивления на web-страницах, есть множество других подходов: простое размещение картинки (возможно с искажениями против простой текст в котором символ "@" заменен на [at], [dog] ... , или разделение символов адреса пробелами: m y n a m e @ m y s i t e . c o m, или подобные операции; преобразование в строку, содержащую цифровые , где символы заменены на конструкции &#N, где N - это кодовая позиция символа в символьном наборе документа. При этом браузеру все равно как вы пишите, т.е., для браузера @ и @ совершенно одно и то же; представление e-mail в ссылкой вида http://mysite.com/getemail.php?d=mysite.com&u=pupkin, при клике на которую запрашивается скрипт на сервере, который возвращает HTTP-заголовок Location: mailto: myname@mysite.com; <style type="text/css">A.email:active { background-image: url('mailto:myname@mysite.com');}</style> <a href="javascript:void(0)" class="email">Пишите письма</a> ) . отображение картинок может быть отключено, а так же e-mail в картинке нельзя просто скопировать со страницы как обычный текст, это создает вероятность ошибки в набранном пользователем адресе; если e-mail представлен как обычный текст, но искажен, то неопытные пользователи могут не сообразить, что адрес нужно подправить; ссылки на серверные скрипты отдающие HTTP-заголовок Location: я не вижу особых проблем с анализом HTTP заголовка Location у spam-роботов (по крайней мере, это намного проще чем интерпретировать код Javascript); CSS: не во всех браузерах работает (Opera, например, не понимает этот ход конем) , да и проанализировать CSS на наличие e-mail адреса, тоже не проблема.

Похожие статьи:




Hosted by uCoz