Мы решили продолжить вести блог и будем в нем рассказывать о своей работе. Начнем с того, что расскажем о том, что нами было нами сделано в 2017 году. За прошедший год нами были разработаны несколько антиспам модулей для CMS, о которых я расскажу подробнее.  Почему модули, а не API. Во первых, они позволяют пользователям быстро и легко подключиться к сервису. Во вторых, не все пользователи обладают знаниями, достаточными для подключения API. В третьих, модули имеют интерфейс управления, что упрощает использование. Немного о самом сервисе: CleanTalk — облачный сервис защиты веб сайтов от спама, предоставляет простую и удобную форму комментария/регистрации для посетителей, которая не будет требовать от посетителя доказывать, что он человек, что экономит время и ресурсы, затрачиваемые на модерацию и проверку сомнительных пользователей или комментариев. Все запросы хранятся в облаке, в том числе и заблокированные, что позволяет предотвратить потерю данных.  Дополнительные возможности: блокировка POST запросов по странам, IP и email, блокировка по “Стоп Словам”, “SpamFireWall” — мягкая” блокировка POST и GET запросов по IP и по маскам подсетей (мягкая — если пользователь был ошибочно добавлен, то через 1 сек будет перенаправлен на страницу сайта). Как это работает: Антиспам модуль, установленный на веб-сайт, передает параметры поведения посетителя, браузера, IP/email и текст сообщения. Эти параметры оцениваются, и сервис принимает решение — разместить сообщение или определить его как спам и отклонить. На основании таких проверок сервис формирует собственный список IP/Email адресов, используемых спам ботами. В черный список добавляются не только IP/Email, но и домены сайтов, продвигаемых посредством рассылки спама. Все это происходит автоматически и не требует никаких действий от администрации сайта. Модуль был разработан по запросам нескольких клиентов и обеспечивает защиту от спама для регистраций, комментариев, формы обратной связи.  Для разработки под MODX есть довольно хорошая документация. Для тех, кто первый раз начинает разработку и знакомство с MODX, не помешало бы добавить в документацию пример создания первого простейшего плагина (build your own first plugin), что значительно упрощает процесс. Сам процесс разработки занял 3-4 дня, вместе с сопутствующими задачами. Добавление модуля в официальный каталог не вызвала каких либо сложностей, все было довольно просто и понятно. Модерация заняла около недели, после отправки модуля подождали 5-6 дней и написали в техподдержку, узнать на каком этапе и как долго ждать, и на следующий день модуль был опубликован. Неизвестно, связано это с обращением или нет. С документацией проблем нет, все понятно и вопросов не вызывает. То же и с разработкой. С размещением в каталоге сложнее, надо разобраться в интерфейсе — он не очень удобный, но самое ужасное — это модерация новых плагинов. Отправив модуль на модерацию в июне 2017, мы до сих пор ждем, когда его опубликуют в каталоге. В общем ситуация схожа с каталогом phpBB, там тоже приходится ждать месяцами.  Решили последовать совету одного из пользователей и создать тему на форуме, в разделе плагины, добавили описание, ссылки на модуль. С документацией для разработки под эту CMS есть проблемы, ее почти нет. Хорошую документацию нашли здесь , за что большое спасибо составителям. Для разработки потребуется vQmod и понимание MVC. В остальном ничего сложного нет.  Довольно удобный интерфейс маркетплейса, все понятно и быстро. Сложностей с добавлением не возникло. Что касается документации для разработчиков, то несмотря, что XF2 еще бета версия, документация для него одна из самых лучших. Сложностей с разработкой не было. Единственное не совсем понятно почему сделано автоматическое формирования хешей файлов (hashes.json) при загрузке плагина, и в итоге каждый раз приходится вручную делать это командой. Интерфейс маркетплейса удобный. Отсутствует модерация плагинов перед публикацией, плагины модерируются после того как вы опубликовали плагин. Это наверное не совсем удобно, так как версия может содержать ошибки, при этом плагин уже успеют скачать. К нашей первой версии мы получили замечания по коду и уведомление, что если мы не устраним, то плагин будет удален из каталога.  Так как количество запросов, о подключении сервиса на не очень популярные CMS стабильно, к тому же мы регулярно получаем запросы с помощью в интеграции API. Так как разрабатывать каждый раз отдельный модуль будет накладно, то было решено сделать универсальный плагин. Универсальный Anti-Spam плагин можно установить на любые пользовательские сайты, системы управления контентом и фреймворки. Если у пользователя нет опыта программирования, чтобы подключить API на сайт, это будет лучшим решением для защиты сайта от спама.  Как это работает?
Установщик CleanTalk добавляет свой код в файл index.php. Когда посетитель заполняет и отправляет форму, плагин перехватывает данные формы и находит email, само сообщение и добавляет к ним некоторые другие параметры и отправляет их в облако CleanTalk, кроме случаев когда в форме были обнаружены запрещенные к отправке данные (они вшиты в плагин и не могут изменены). Получив ответ от сервера плагин пропускает или запрещает дальнейшее выполнение(выводя сообщение о причинах блокировки).  После анализа отправленных параметров серверы CleanTalk решают, должен ли запрос быть заблокирован или разрешен. Так как при написании использовались универсальные библиотеки CleanTalk, надо было организовать исключительно установку и перехват форм. А если честно, то пришлось переписать библиотеки чтобы они работали на чистом PHP и добавить исключения для некоторых полей, таких как регистрации или восстановление паролей, или оплата картами.
На каждое обращение клиента мы делаем тест с его CMS, дополняя плагин для работы конкретно с этой CMS. Поэтому на данный момент мы не хотим делать новые плагины, так как это влечет за собой накладные расходы, в виде потери времени на поддержку версий в актуальном состоянии. Сами плагины: MODX
MyBB
OpenCart
XenForo2
Универсальный плагин
 На данный момент мы не планируем расширять линейку плагинов, только поддержка и развитие функционала текущих. Мы надеемся, что универсальный плагин сможет закрыть эти пробелы, так как проще доработать один плагин, чем делать каждый раз новое.