Pull to refresh

Спам в комментариях — технические методы противодействия

Reading time8 min
Views2.7K
Ниже приведена сумма основных, широко используемых методик противодействия спаму в комментариях (и прочим способам автоматической отправки нежелательных сообщений) — часть методик я использую при разработке собственных Web-приложений.

1. «Марсиане» — POST-запрос без предварительного чтения страницы

Комментарии обыкновенно отправляются POST-запросом. При этом предполагается, что посетитель вначале посетил саму страницу, а потом уже оставляет комментарий — отправляет запрос.

Некоторые спам-боты не настолько умны, чтобы заботиться о загрузке страницы и сохранении всего полагающегося вороха данных — таких как «конфетки» (Cookies).

Отсутствие заголовка Referer. Слабая защита, потому что все заголовки элементарно подделываются. Тем не менее, если такого заголовка нет, можно с чистой совестью отвергать попытку оставить комментарий.

То же касается и возможного анализа поля User-Agent.

Нет «конфетки». «Конфетки», Cookies, используются для хранения, например, признака аутентификации на сайте или хотя бы просто факта посещения сайта. Если пришёл POST, но нет корректной «конфетки» — отвергаем попытку комментировать.

Неверный идентификатор сессии. Простое решение: передавать в каждой странице специальное значение, которое по известной схеме сравнивается с сохранённым на стороне сервера. Нет корректного значения — значит, попытка либо отправить комментарий повторно, либо попытка отправить комментарий при помощи бота. Отвергаем.

IP клиента сменился между запросом страницы и отправкой формы. Сейчас всё ещё есть провайдеры, при работе через которых назначенный IP компьютера может время от времени меняться. Редко, но бывает. В других же случаях это, скорее, свидетельствует об использовании прокси (см. также ниже) и может рассматриваться как подозрительное действие.

2. CAPTCHA (completely automated process to tell computers and humans apart), он же тест Тьюринга

Самая популярная схема сейчас, многие полагают её лучшим инструментом. Однако не следует забывать: что все тесты Тьюринга, сколь бы изощрёнными ни были, не пройдут испытания против спамера-человека. Разумеется, спамеры не сядут сами отгадывать Captcha. они наймут для этого желающих быстро заработать, по пять центов за одну Captcha. Это давно уже стало бизнесом.

Если у вас всюду Captcha, и простому решению не поддаются, то будьте уверены: и к вам придут спамеры-люди.

Кроме того, чем изощрённее Captcha, тем больше вероятность, что она отпугнёт нормальных, человеческих посетителей.

Верификация комментария как вариант Captcha. Известный способ «challenge-response», в том числе используется как вариант противодействия почтовому спаму: потребовать ввода почтового адреса и направить на него запрос с ссылкой активации для публикации комментария.

Отрицательные стороны: человеку это не очень понравится, и повторно на ваш сайт он может уже и не зайти. Кроме того, если ссылка не требует никаких особых действий, кроме вызова её, не так сложно спамеру настроить почтовый ящик, чтобы подобные ссылки «вызывались» автоматически. Можно подкладывать в письмо ложные ссылки (спам-бот пройдёт по ним и внесёт себя в чёрный список), но на них будут попадаться и легитимные посетители. Человеку свойственно ошибаться.

3. Имена полей формы

Большинство популярных двигателей сайтов «грешат» тем, что имена полей у них стандартные. Это очень облегчает жизнь авторам ботов — отправляем форму с известными значениями, и дело в шляпе. Есть несколько вариантов решения.

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

Добавить ложные поля. Это более удачное решение. Добавляем множество полей схожих типов со схожими по структуре именами. Автомат или не сможет заполнить их все, или заполнит не те (особенно, если полей много). Скрыть поля легко при помощи CSS, боты (пока что) не настолько умны, чтобы анализировать стили и видеть, какие поля доступны человеческому посетителю.

Менять имена полей при каждой генерации страницы, выдавать поля всё время в разном порядке. Оптимальный вариант в сочетании с предыдущим: автоматы будут путаться, что именно заполнять, и с большой вероятностью будут выдавать себя.

4. Временные параметры

Человек не может отправить форму с заполненными данными спустя пару миллисекунд после получения страницы. Боты могут, и не всегда следят за временем после загрузки страницы. Следовательно, есть возможность проверить, человек ли с той стороны.

Выждать несколько секунд после загрузки страницы. Если форма с данными приходит быстрее чем через N секунд (дайте человеку подумать, прочесть и высказаться — пусть N не меньше, скажем, чем минута при комментировании основного текста и хотя бы 15 секунд при ответе на другой комментарий).

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

Ограничения на количество комментариев. Не разрешать более чем M комментариев в единицу времени от конкретного IP. Достаточно частая и разумная мера против автоматических поставщиков комментариев.

Ограничить время жизни сессии. Нужно подходить с умом. Это может отчасти обезопасить от способов обходить Captcha при помощи «негров» (нанятых решателей), но не должно создавать серьёзных неудобств у легитимных посетителей.

5. Подозрительные адреса

Публичные прокси. Хотя слухи о всемогуществе прокси как средстве маскировки сильно преувеличены, всё же их вполне можно использовать, если на некоторые адреса наложен запрет. Если прокси анонимизирующий, и подлинный адрес выяснить не удаётся, вся надежда только на анализ публичных списков прокси (см. FreeProxy как пример источника списков прокси). Сюда же можно внести и прокси сети Тор. Но там проще — полный список серверов всегда доступен и доступ из сетки Тор можно при желании запретить.

Естественно, что запрет на использование прокси отсечёт и вполне легитимных пользователей, которые по тем или иным причинам используют прокси-сервис.

Стоп-списки. Начать можно со SpamHaus, где есть, помимо известного DROP-списка, простой способ определения причастности IP адреса к списку всех «засвеченных», причастных к спаму или родственной деятельности, IP адресов. В то время как с DROP-списком всё понятно — блокировать безусловно — то с другими не всё так просто, учитывая ложные сигналы и возможность попадания в стоп-списки «ни за что».

Адреса, принадлежащие сайтам. Если запросы происходят с адреса, на котором живут, например, многие сайты, есть основания задуматься, легитимны ли попытки отправить с этих адресов комментарии. Если используется API — одно дело, если имитируется отправление формы комментария — другое дело — вероятно, необходимо отказать в публикации.

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

6. Службы фильтрации спама.

Из них стоит упомянуть Akismet и Mollom. Обе, естественно, имеют ограничения при использовании на бесплатной основе, у обоих есть платные подписки (определяйте, по карману ли вам то или иное).

Как любые тренируемые системы, несвободны от ошибок и может потребоваться множество сигналов с разных сайтов, прежде чем один и тот же тип спама начнёт эффективно ловиться во всех других местах.

7. JavaScript

Боты обычно не используют JavaScript, его интерпретация и исполнение занимали бы слишком много времени и ресурсов, а бот должен работать эффективно и быстро. Оборотная сторона — если легитимный пользователь частично или полностью блокирует JS на страницах вашего сайта (популярная в наши дни мера), ему будет затруднительно комментировать.

Варианты в этой связи:

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

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

Шифрование страницы или части страницы. Если страница зашифрована так, что простыми средствами без обмена с сайтом страницу не привести в читаемый вид, то угадать имена полей (если они меняются от запроса к запросу, см. выше) становится практически невозможно без использования полноценной реализации JS.

Разбитые URL. Это не то чтобы защита от спама, но способ сделать его бесполезным. При помощи JavaScript превращаем существующие в «замусоренном» состоянии ссылки в подлинные. Исходный HTML не содержит рабочих URL, которые могли бы узнать поисковые службы — таким образом, спам становится малоэффективным.

Если дать возможность преобразовывать в «хороших» комментариях URL в обычные (заметим, что это отнимет у вас или ваших помощников какое-то время на анализ комментариев), то ситуация станет приятнее для легитимных посетителей.

8. Грубая сила

rel=«noindex,nofollow» как атрибут всех ссылок. Не всегда эффективно, не всеми поисковиками эти атрибуты принимаются во внимание. К тому же, при безусловном наложении таких атрибутов на все без исключения комментарии интерес к сайту потеряют многие легитимные посетители.

Убрать поле URL в комментариях, как это сделано по умолчанию, например, в Drupal. Тоже «отпугнёт» часть легитимных посетителей (многие оставляют свои ссылки не ради повышения индекса цитирования, а для того, чтобы познакомиться с вами, если можно так сказать). Правда, по моему опыту, спаммеров это не очень отпугивает — просто ссылки помещаются в тело комментария. Хоть поисковики и не всегда увидят такую ссылку, сайт она точно не украсит.

Если спам поставляет человек

Тут возможны две основных ситуации:

— спамер использует сервис для «разгадки» препятствий типа Captcha, где нанятые за небольшие деньги люди решают эти задачки. Просто и эффективно.
— спамер нанимает людей с инструкциями, на какие сайты и какие именно комментарии оставлять. Не обязательно совсем вручную — чаще всего полуавтоматически, с использованием программного обеспечения для ускорения процесса

Казалось бы, выход один — анализировать оставленные ссылки (собственно, ради них и пишутся комментарии). Но есть вполне перспективные семантические проекты по анализу подобных спам-записей, анализу сайтов, в них упомянутых. Сказать конкретно, что уже есть из доступных широкой общественности наработок, не могу. Если кому-то подобные проекты известны, дайте мне знать, пожалуйста.

Заключение

В статье указаны основные идеи, которые, несомненно, приходили в голову многим людям. Революционно новых способов противодействия автоматическому и полуавтоматическому спаму нет и быть не может, это традиционная ситуация «броня против снаряда».

Я предполагаю, при создании очередных версий своих Web-продуктов, в которых требуется защита от автоматической отправки сообщений (в т.ч. комментариев) применять следующие способы:

а) стоп-списки. Блокируем уже известных спамеров до того, как начинаем анализировать их данные; сюда же входят такие службы, как Akismet, Mollom и т.п.
б) проверка на «марсиан» — все сессионные данные должны быть на месте
в) временные рамки: не позволяем отправлять комментарий слишком быстро и/или слишком часто
г) (если включен JS) при помощи AJAX-методик меняем сессионные параметры, чтобы усложнить жизнь ботам
д) создаём ложные поля помимо корректных, для всех них создаём случайные имена, при наличии JS шифруем ту часть страницы, где собственно поля ввода — для затруднения жизни ботам

Кроме того.

При срабатывании «сигнала тревоги» — если есть подозрения на спам — немного ухудшаем жизнь тому, кто пытается отправить повторно — добавляем Captcha, увеличиваем временной интервал между отправкой следующего варианта формы. При достоверном спаме вносим IP в чёрный список и на некий интервал безусловно блокируем возможность отправки сообщений с него, для живых пользователей оставляем чёткие инструкции о том, как снять запрет.

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

Ну и, конечно, вести свою БД спаммерских IP и всех внешних признаков ботов, которые те используют — для идентификации их на ранних стадиях, поскольку все перечисленные процедуры — значительная нагрузка на сервер.
Tags:
Hubs:
Total votes 24: ↑23 and ↓1+22
Comments30

Articles