• Zalgo

  •  

 

14451108125480

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

Демонстрация
Посмотреть на само явление и сгенерировать его можно тут: генератор ZALGO (только не надо этим спамить, прошу вас, проявите уважение к окружающим вас людям)

Сам по себе ZALGO текст представляет из себя ряд повторяющихся друг за другом надстрочных символов. Такой функционал был добавлен в Unicode для того, чтобы отображать арабские, немецкие(Ü) и китайско-японские алфавиты, поэтому какой-бы то нибыло видимой защиты от данного явления — нет. И единственный способ борьбы со спамерами использующими эту, с позволения сказать, уязвимость — ручная модерация и бан.

К примеру блог zenpr, в одно время, был доверху забит такого рода спамными комментариями.
Потом анонимус решил позверствовать на ТопСапе Чане, что и побудило меня найти лекарство от этой «заразы».
Не хватало еще, чтобы мою борду перекинулась эта эпидемия! Полез в гугл и на Stackoverflow для поиска решения этой роблеммы. И не нашел оного. Точнее было одно решение, которое предполагало чистку всех символов, кроме букв и цифр. Но оно было, мягко говоря не оптимальным и не кошерным. Пришлось изучать матчасть и писать свой костыль.

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

Первое, консервативное:

$text = preg_replace("~[\p{M}]~uis","", $text);

Полностью удаляет все надбуквенные метки. То есть буква Ё станет после обработки просто буквой Е. Если вы готовы смириться с этой утратой — используйте эту регулярку.

Второе, более либеральное:

$text = preg_replace("~(?:[\p{M}]{1})([\p{M}])+?~uis","", $text);

Данный вариант удаляет все буквенные метки выше 1-го уровня вложенности. Проще говоря буева Ё так и останется буквой Ё.

Такой текст — ͐̈ͩ̎Zͮ͌ͦ͆ͦͤÃ̉͛̄ͭ̈̚LͫG̉̋͂̉Oͨ͌̋͗!

Будет преобразован в такой — ZÄLͫGO!

Хорошие новости
Для защиты вашего блога на WordPress от спама через эту дыру в кодировке я создал простенький плагин.
Скачать его можно тут

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

Добавить Комментарий