Мыльная спам-защита. Обзор техник для админа.

Главные вкладки

Аватар пользователя VladSavitsky VladSavitsky 10 ноября 2007 в 18:20

Кратко о том, как уберечь свой ящик от нежелательной почты (спама) для простых смертных:
*завести отдельный ящик для спама - его использовать на всех сайтах, которые требут регистрации через мыло.
*Не светить свой ящик без необходимости (особенно на форумах).
*Использовать средства защиты от спама.
*По желанию: использовать сервисы типа http://2prong.com/, чтобы получить ящик на время регистрации на другом сайте. Получить строку активации и навсегда забыть про этот ящик.

Администраторы сайтов также являются простыми смертными, но они описанное выше знают и исполняют. Потому они и админы!...

Что же можно сделать, чтобы защитить адреса на сайте от спамеров?

==Задача==
*настоящий адрес, а не contact_removethis@company.com,
*при щелчке мышью срабатывает как и ожидается,
*имеет иммунитет от спам-роботов.

==Варианты==
Роботы не распознают JS и изменения в DOM-структуре... Поэтому можно сделать модификацию HTML-кода уже в браузере клиента. Спам-боты его не увидят, а увидят только полноценные браузеры. Имено это и делает модуль [http://drupal.org/project/spamspan SpamSpan].

*The SpamSpan module obfuscates email addresses to help prevent spambots from collecting them. It implements the technique at http://www.spamspan.com.
*Зависит от: Filter
*Разрабатывается с 2006 года.
*Позволяет менять [at] на странице "Настройка" (/admin/settings/filters/1/configure) при редактировании определённого фильтра ввода... Но эти настройки ни на что не влияют....

Настройка:
#Заходим на страницу настройки "Фильтры ввода" (/admin/settings/filters)
#Ищем чекбокс "Hide email addresses" и ставим галочку. Повторяем для каждого фильтра.
#Пишем статью с мылом для проверки....

На странице вижу: dsdf [at] sdfsdf [dot] com (это без JS - так увидят страницу спам-боты)
Вот как выглядит код:
dsdf [at] sdfsdf [dot] com

Включаем JS. На странице вижу: dsdf@sdfsdf.com (обычная ссылка mailto - при щелчке вызывается почтовый клиент для сочинительства)
Вот как выглядит код:
dsdf@sdfsdf.com

'''Ложка дёгтя:'''

Во-первых, всё ещё есть пользователи, которые по тем или иным причинам не имеют поддержки JS - старые браузеры, корпоративная политика фирмы, текстовые браузеры и др. Они остаются за бортом...

Во-вторых, мне кажется, что нельзя недооценивать врага. Мне кажется, что нужно быть очень тупым роботом, чтобы не заподозрить в этой строке мыло:
dsdf [at] sdfsdf [dot] com
Всё, что можно менять - имена классов для имени и домена и символ [at]... Не такое уж и большое разнообразие.

Конечно - это лучше чем ничего, но всё же стоит посмотреть что ещё есть у нас в арсенале...
--------
Есть ещё модуль [http://drupal.org/project/GTSpam GTSpam].

Настраивается также - на странице форматов ввода среди остальных фильтров ищите чекбокс "Obfuscate email addresses"...

Дополнительных настроек, в отличии от предыдущего модуля, нет вообще - это уже плохо.

На странице адрес выглядит так:
dsdf@sdfsdf.com" rel="nofollow">dsdf@sdfsdf.com
Очень плохо! Адрес виден - и это и при включённом JS и при выключенном.

Я уж было совсем расстроился - и так модуль был у меня в чёрном списке, потому что не работал... Просто вышла новая версия - дай думаю посмотрю...

Но, оказалось, что это я неправ - нужно этот фильтр ставить самым первым (верхним) в списке - тогда всё ОК!

Вид на странице с JS: dsdfsdfsdf.com - то есть он соединил имя пользователя и домен в одну строку
Код:
dsdfsdfsdf.com

Это уже интересно!...

Без JS. Вид на странице и код такой же! Ура. Очень интересно!...

При щелчке мышью открывает окно почтовой программы - всё как нужно. Самое время дать инфу по модулю:

*5.x-0.4
*The GlobalTEK GTSpam module obfuscates email addresses to help prevent spambots from collecting them, without loosing the mailto URL scheme default semantics and operations (see RFC 2368).
*Зависит от: Filter
*Проект появился в июле 2007

'''Ложка дёгтя:'''

При щелчке мышью - открывает новое окно с пустой страницей, а лишь затем окно почтовой программы. Странное поведение. Ведь можно было открыть в этом же окне эту ссылку и сделать редирект на страницу, с которой скрипт вызвали... Ок. Об этом можно будет поговорить с автором...

А вообще этот модуль оказался даже лучше, чем первый. Я даже не ожидал...

--------
Идём дальше.

(Пока писал кто-то уже поставил статье 1 балл - аж хочется дальше разбираться! Спасибо Smile

Модулей на эту тему на drupal.org я больше не нашёл. Зато нашёл новый модуль (проект начат в сентябре 2007го) - [http://drupal.org/project/gotcha Gotcha]. Защищает стандартную форму контактов Друпал. Добавляет поле, которое показывается средствами CSS, а роботы его не увидят. При отправке формы проверяется заполнение этого поля - если пусто - спам.
--------
Хочется ещё описать технику, которую нашёл на сайте http://www.alistapart.com - она не реализована в виде модуля, но возможно это будет сделано, потому что спам достал всех!

===Ингридиенты:===

*Нужны Apache 2 и PHP 4 или выше.
*Модуль mod_rewrite включён
*Возможность изменять .htaccess

===Маскировка:===

Нужно сделать так, чтобы ссылка ниже выглядела совершенно не похожей на почтовую ссылку:
E-mail our sales department

После преобразования на стороне сервера мы должны получить:
E-mail our sales department

После применения [http://en.wikipedia.org/wiki/Rot13 ROT13] (смещение на 13 символов по кругу):
E-mail our sales department

Несколько замечаний:
*“contact” как имя папки в примере можно изменить на любое другое. Для замены “@” и точек в адресе применено“+”, потому что обычно ”+" не позволяется в настоящих адресах e-mail и не нуждается в URL-перекодировании, что пригодится позже.
* Параметр rel="nofollow" добавлен, чтобы поисковики не шли по этим ссылкам. Смотрите [http://microformats.org/wiki/rel-nofollow детали о rel="nofollow" на Microformats.org].

(Уже 2 балла поставили... А статья ещё не закончена...)
*Кроме того, ссылка является неправильной - она не существует и любой робот может научиться это определять, потому что страницы по этому адресу просто нет. Позже мы это должны будем исправить.

===Код===
Этот код заменяет все правильные мыльные ссылки на запутанные:

function encrypt_mailto($buffer) {
preg_replace("/\"mailto:([A-Za-z0-9._%-]+)\@([A-Za-z0-9._%-]+)\.([A-Za z]{2,4})\"/","\" contact/\\1+\\2+\\3\" rel=\"nofollow\"",$html)
}

Если использовать ROT13, то код становится несколько длинее... Ссылка на полный скрипт будет в конце статьи.

===Починяем ссылку===
Если кто-то щёлкнет ссылку, которую мы сделали, то он получит Error 404! А это не хорошо. Используя JS это решается в несколько строк, но мы помним о 6% людей без JS... Апачи нам поможет!

Настроим mod_rewrite так, чтобы все ссылки он корректно распознавал:

RewriteRule ^.*contact/([A-Za-z0-9._%-]*)\+ ([A-Za-z0-9._%-]*)\+([A-Za-z.]{2,4})$ /yourpath/mail.php?n=$1&d=$2&t=$3 [L]

[http://www.alistapart.com/d/emailobscuration/geo/source/geo.zip Скачать архив со скриптами (8Кб)]. Автор утвреждает, что работает во всех браузерах, включая ИЕ5.01

Спамеры становятся умнее и нужно быть готовым к этому!

==Дополнительная информация==
*[http://www.alistapart.com/articles/gracefulemailobfuscation Graceful E-Mail Obfuscation]
*[http://en.wikipedia.org/wiki/Anti-spam_techniques_%28e-mail%29 Wikipedia: Anti-spam techniques (e-mail)]

Комментарии

Аватар пользователя VladSavitsky VladSavitsky 11 ноября 2007 в 0:08

Ошибка вышла. Есть оказывается настройки и у модуля GTSpam:
На странице настройки фильтра (/admin/settings/filters/1/configure) вверху ищите "GTSpam email address filter"...

Там можно сделать преобразование ссылки уникальным, причём для каждого формата ввода.

Модуль вставляет между именем пользователя и доменом значок "собаки", но он не будет виден, если в фильтре не разрешен тег IMG. Это нужно проверять, так как я этот тег отключаю из-за возможности XSS...

Аватар пользователя tema tema 14 ноября 2007 в 16:19

Использую стандартный contact.module, Email field и доработанный напильником Email Verification.

Метод очень простой и надежный.

Посетитель жмет ссылку и пишет письмо без участия почтового клиента. Для отправки необходимо указать реально существующий обратный адрес. Если посетителю никто не ответит, он так и не узнает куда было доставлено письмо.

Адреса электронной почты на сайте отсутствуют, форма отправки (как и все остальные формы) защищена от ботов и флада стандартными средствами, текст сообщения фильтруется.

Почта ходит, спама нет Smile

Аватар пользователя VladSavitsky VladSavitsky 15 ноября 2007 в 5:55

'''2 tema:'''

Решение хорошее, но если пользователь в свой статье укажет адрес (свой или чужой), то спам-боты его найдут. Этот модуль является именно фильтром ввода пользовательских данных.

А за настройку обратной связи спасиб - я сохраню у себя эту информацию.

Недавно появился модуль на эту тему: [http://drupal.org/project/gotcha Gotcha - Contact Spam Catcher]

'''2 andron13:'''

Спасибо за ссылку - сейчас разбираюсь с этим вопросом.
У greylisting есть слабые стороны и если он станет повсеместно используемым решением, то перестанет защищать. Чем оригинальнее решение - тем меньше вероятность, что сломают.