Невизуальные методы защиты сайта от спама. Часть 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. Заключение
Я привёл два способа подстановки символов. Обратная замена проста, нетребовательна к ресурсам и сильно повышает правильность работы фильтров, основанных на анализе слов и выражений.