Продолжение статьи Невизуальные методы защиты сайта от спама

Часть 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)


  1. Alexufo
    11.05.2016 15:16

    люблю и пользуюсь вашим сервисом. Но вы спрятали кнопку онлайн проверки ip адресов и емейлов на спам. Точнее кнопка такая есть, но ее найти нужно)). 1000 емейлов за раз, в ручном режиме администраторы своих форумов сайтов могут бесплатно найти у себя ботов.


    1. shagimuratov
      11.05.2016 15:46

      Ссылка на форма поиска по списку адресов есть на каждой странице с историей спам-активности IP/Email адреса,
      https://cleantalk.org/blacklists?lang=ru

      Ссылка «Пакетный поиск спамботов». Если речь идет о проверке существующих акаунтов/комментариев в админке сайта/форума, то подскажите пожалуйста CMS вашего сайта, подумаем как улучшить видимость кнопки.

      В любом случаи, спасибо большое за обратную связь.


      1. Alexufo
        11.05.2016 15:58

        Про кнопку на сайте, вот она, да https://cleantalk.org/spambots-check
        очень выручает какой нибудь рабочий сайт избавить от ботов.


        1. shagimuratov
          11.05.2016 16:29

          Хорошо, вытащим ее куда-нибудь выше, либо добавим в Панель управления.


  1. vgurov
    12.05.2016 11:08

    На эту тему есть развернутая статья, в которой проведено визуальное сравнение юникодных символов http://research.sidstamm.com/papers/unicode-spam.pdf
    По результатам сравнения исследователи нагенерили таблиц с коэффициентом похожести UC-Simlist (конкретные таблицы легко гуглятся).


    1. znaeff
      12.05.2016 12:56

      Спасибо за ссылку.


  1. yomayo
    12.05.2016 11:56

    Было бы интересно услышать, как бороться со спам-посетителями. На своём сайте веду статистику посещений. И там немало «левых» $_SERVER['HTTP_REFERER']: там указаны сайты (на самом деле эти сайты рекламируются!), с которых ко мне просто не может быть переходов. Как бы вот с этим побороться? Они же портят не только записываемое в мой журнал, но и статистику Google Analitycs.


    1. znaeff
      12.05.2016 13:04

      Подскажите, из чего видно, что сайты именно рекламируются таким образом?
      С такими заголовками идут спам-посты?
      Спаму нужна аудитория, а какая аудитория у журналов web-серверов…


    1. AleksandrRazoR
      13.05.2016 08:25

      Это похоже на реферальный спам. Если IP этих ботов вам известны, можно заблокировать их через htaccess, только при большом htaccess сайт может медленнее работать.

      Если используете какую либо из этих CMS: WordPress, Joomla, Drupal, Bitrix, SMF, MediaWiki, IPS Community Suite, можно попробовать использовать CleanTalk SpamFireWall.

      Если какие либо IP адреса не будут учтены в SFW, их можно добавить в BlackList вручную.

      Либо можно поискать в гугле другие варианты решений.


      1. yomayo
        16.05.2016 11:16

        Рекламируются автосалоны, Интернет-магазины, мебель, школы иностранных языков, онлайн-кинотеатры, средства для повышения потенции, юридические услуги, интим-услуги, онлайн-аптеки и прочая, прочая. Несть им числа. Какое отношение они имеют к моему сайту? Да никакого! Мой сайт вообще о программировании. Если он упомянут на Хабре, то с Хабра приходят посетители с соответствующим $_SERVER['HTTP_REFERER']. Я могу зайти по этой ссылке и найти на этой странице ссылку на свой сайт. А вся перечисленная выше шелуха ссылок на меня не содержит. Какой им смысл так рекламироваться – не понимаю.

        IP-адреса этих спам-посетителей, естественно, фиксируются. Но они постоянно меняются: сегодня ты закрыл два десятка, а на следующей неделе они лезут уже с других. Какого-то надёжного способа определения добросовестности посетителя нет. Единственное, что приходит в голову – составить список добропорядочных $_SERVER['HTTP_REFERER'] и использовать его в качестве фильтра.


        1. shagimuratov
          16.05.2016 11:33

          Проверьте IP посетителей с реферальным спамом здесь,
          https://cleantalk.org/blacklists
          Если они в есть в нашей базе (в том числе если база выдает пометку SpamFireWall, https://cleantalk.org/blacklists?record=210.101.131.232), то любой из наших плагинов с включенной опцией SpamFireWall отсеет реферальный спам.

          + вы можете в Панели управления сервисом добавлять сети IP адресов для ручной фильтрации, т.е. при желании можете пустить через SpamFireWall весь трафик вашего сайта.


          1. yomayo
            17.05.2016 19:27

            Этот список (https://cleantalk.org/blacklists) слишком мал. Мой в разы больше. Полагаю, что надо распарсить страницу, на которую ссылка из $_SERVER['HTTP_REFERER'] и выявить, есть ли там ссылка на мой сайт. Если нет, то путь идут в баню.


            1. shagimuratov
              18.05.2016 04:48

              В списке выше более 3 млн. спам активных (по большей части прокси сервера) IP адресов. У вас база больше?


  1. delimer
    12.05.2016 12:45

    Плохое решение. Из первого примера диапазоны U+1F130 и U+1F150 у меня отображаются просто квадратиками.


    1. znaeff
      12.05.2016 13:01

      Про отображение символов в FF статья: http://forum.mozilla-russia.org/viewtopic.php?id=64761 Возможно, Вам поможет.


      1. delimer
        12.05.2016 13:12

        У меня хром. И если вдруг я попаду на сайт на котором будет вместо нормального текста квадратики — то это сигнал к тому, что на этом сайте делать нечего.


        1. znaeff
          12.05.2016 15:11

          Вот наше решение и нацелено на то, чтоб сайты от спамерских квадратиков избавлять.