Невизуальные методы защиты сайта от спама. Часть 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. Заключение


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

© Habrahabr.ru