Часть 2. Истинное лицо символов
Невизуальные методы защиты сайта от спама используют, в частности, анализ переданного текста. Спамеры используют много приёмов, чтобы усложнить такой анализ. Здесь будут показаны примеры одного из них, а именно подстановки символов. Приведённые примеры взяты из реальных данных компании CleanTalk.
Подстановка символов очень проста, но в результате неё могут не работать фильтры по стоп-словам, могут хуже работать байесовские фильтры, а также фильтры с определением языка. Поэтому перед применением этих фильтров имеет смысл вернуть символам их истинное лицо.
Сразу оговорюсь, что заменять символы “в лоб”, например, национальные символы с начертанием латинской ‘a’ на саму латинскую ‘a’, совершенно неприемлемо без анализа языка и контекста. Также заменять буквы, похожие на ноль, самим нулём можно лишь в случае, когда точно известно, что искать в тексте (например, номера телефонов).
Тем не менее, замена символов допустима в случае, когда смысл написанного текста после замены сохраняется. И необходима для приведения некоего множества служебных символов к одному.
Здесь я покажу два наиболее интересных, на мой взгляд, способа такой подстановки символов из встретившихся нам.
1. Замена символов обычного начертания
Спамеры делают всё, чтобы текст бросался в глаза, даже при беглом взгляде. К счастью для них, Unicode предоставляет наборы латинских символов расширенного начертания. К счастью для нас, это легко исправляется.
Ниже приведены самые распространённые способы, как латинские символы заменяются на те же латинские, но не из основного диапазона латиницы.
Вид символов | Начала диапазона | Пример |
---|---|---|
расширенные | U+FF01 | ViaGra |
в рамках основные | U+2460 | ⑧-⑧⓪⓪-①②③-④⑤-⑥⑦ |
в рамках дополнительные | U+1F130 | 🄲🄰🄻🄻 |
в рамках дополнительные | U+1F150 | 🅝🅞🅦 |
в рамках дополнительные | U+1F170 | 🅵🅾🆁 |
в рамках дополнительные | U+1F1E6 | 🇫🇷🇪🇪 |
Замена таких латинских символов на обычные делается простым регулярным выражением. После такой замены последующие фильтры работают качественнее и быстрее, т.к. диапазон входных значений сильно сужается.
2. Замена точки
Точка как символ используется намного шире, чем знак препинания — это и разделитель полей, и разрядов, и разделитель цифр в спамерских телефонных номерах и т.д.
Поэтому мы столкнулись с необходимостью приведения многообразия спамерских точек к одной единственной.
Самые распространённые из встретившихся нам такие подстановки точек приведены ниже.
Заменитель, код | Заменитель, вид |
---|---|
U+3002 | 。 |
U+0701 | ܁ |
U+0702 | ܂ |
U+2024 | ․ |
U+FE12 | ︒ |
U+FE52 | ﹒ |
U+FF61 | 。 |
Замена точек может быть выполнена простым регулярным выражением
tr/
\N{U+3002}\N{U+0701}\N{U+0702}\N{U+2024}\N{U+FE12}\N{U+FE52}\N{U+FF61}
/
\N{U+002E}\N{U+002E}\N{U+002E}\N{U+002E}\N{U+002E}\N{U+002E}\N{U+002E}
/
Замечено, что после замены точек последующие фильтры работают реально эффективнее.
3. Заключение
Я привёл два способа подстановки символов. Обратная замена проста, нетребовательна к ресурсам и сильно повышает правильность работы фильтров, основанных на анализе слов и выражений.
Комментарии (17)
vgurov
12.05.2016 11:08На эту тему есть развернутая статья, в которой проведено визуальное сравнение юникодных символов http://research.sidstamm.com/papers/unicode-spam.pdf
По результатам сравнения исследователи нагенерили таблиц с коэффициентом похожести UC-Simlist (конкретные таблицы легко гуглятся).
yomayo
12.05.2016 11:56Было бы интересно услышать, как бороться со спам-посетителями. На своём сайте веду статистику посещений. И там немало «левых» $_SERVER['HTTP_REFERER']: там указаны сайты (на самом деле эти сайты рекламируются!), с которых ко мне просто не может быть переходов. Как бы вот с этим побороться? Они же портят не только записываемое в мой журнал, но и статистику Google Analitycs.
znaeff
12.05.2016 13:04Подскажите, из чего видно, что сайты именно рекламируются таким образом?
С такими заголовками идут спам-посты?
Спаму нужна аудитория, а какая аудитория у журналов web-серверов…
AleksandrRazoR
13.05.2016 08:25Это похоже на реферальный спам. Если IP этих ботов вам известны, можно заблокировать их через htaccess, только при большом htaccess сайт может медленнее работать.
Если используете какую либо из этих CMS: WordPress, Joomla, Drupal, Bitrix, SMF, MediaWiki, IPS Community Suite, можно попробовать использовать CleanTalk SpamFireWall.
Если какие либо IP адреса не будут учтены в SFW, их можно добавить в BlackList вручную.
Либо можно поискать в гугле другие варианты решений.yomayo
16.05.2016 11:16Рекламируются автосалоны, Интернет-магазины, мебель, школы иностранных языков, онлайн-кинотеатры, средства для повышения потенции, юридические услуги, интим-услуги, онлайн-аптеки и прочая, прочая. Несть им числа. Какое отношение они имеют к моему сайту? Да никакого! Мой сайт вообще о программировании. Если он упомянут на Хабре, то с Хабра приходят посетители с соответствующим $_SERVER['HTTP_REFERER']. Я могу зайти по этой ссылке и найти на этой странице ссылку на свой сайт. А вся перечисленная выше шелуха ссылок на меня не содержит. Какой им смысл так рекламироваться – не понимаю.
IP-адреса этих спам-посетителей, естественно, фиксируются. Но они постоянно меняются: сегодня ты закрыл два десятка, а на следующей неделе они лезут уже с других. Какого-то надёжного способа определения добросовестности посетителя нет. Единственное, что приходит в голову – составить список добропорядочных $_SERVER['HTTP_REFERER'] и использовать его в качестве фильтра.shagimuratov
16.05.2016 11:33Проверьте IP посетителей с реферальным спамом здесь,
https://cleantalk.org/blacklists
Если они в есть в нашей базе (в том числе если база выдает пометку SpamFireWall, https://cleantalk.org/blacklists?record=210.101.131.232), то любой из наших плагинов с включенной опцией SpamFireWall отсеет реферальный спам.
+ вы можете в Панели управления сервисом добавлять сети IP адресов для ручной фильтрации, т.е. при желании можете пустить через SpamFireWall весь трафик вашего сайта.yomayo
17.05.2016 19:27Этот список (https://cleantalk.org/blacklists) слишком мал. Мой в разы больше. Полагаю, что надо распарсить страницу, на которую ссылка из $_SERVER['HTTP_REFERER'] и выявить, есть ли там ссылка на мой сайт. Если нет, то путь идут в баню.
shagimuratov
18.05.2016 04:48В списке выше более 3 млн. спам активных (по большей части прокси сервера) IP адресов. У вас база больше?
Alexufo
люблю и пользуюсь вашим сервисом. Но вы спрятали кнопку онлайн проверки ip адресов и емейлов на спам. Точнее кнопка такая есть, но ее найти нужно)). 1000 емейлов за раз, в ручном режиме администраторы своих форумов сайтов могут бесплатно найти у себя ботов.
shagimuratov
Ссылка на форма поиска по списку адресов есть на каждой странице с историей спам-активности IP/Email адреса,
https://cleantalk.org/blacklists?lang=ru
Ссылка «Пакетный поиск спамботов». Если речь идет о проверке существующих акаунтов/комментариев в админке сайта/форума, то подскажите пожалуйста CMS вашего сайта, подумаем как улучшить видимость кнопки.
В любом случаи, спасибо большое за обратную связь.
Alexufo
Про кнопку на сайте, вот она, да https://cleantalk.org/spambots-check
очень выручает какой нибудь рабочий сайт избавить от ботов.
shagimuratov
Хорошо, вытащим ее куда-нибудь выше, либо добавим в Панель управления.