Движок #MyEngine CMS обладает встроенным модулем для регистрации новых пользователей. Но в официальном чате стали появляться жалобы на массовую регистрацию спам-ботов через него.
Штатная каптча, размещённая в форме для регистраций, ситуацию никак не меняет. Боты сумели её обойти. В данной статье я приведу небольшой фикс, позволяющий отсечь изрядную часть спамеров. Идея реализации такой скрытой защиты не нова, но адаптирована именно для модуля Регистраций.
Автоматическая установка Антиспама
Инструкция
- Скачать файл Antispam.php
- Загрузить его в директорию
/modules/users
вашего сайта (модуль users) - Активировать, запустив из браузера --
YOUR.DOMAIN/modules/users/Antispam.php
(YOUR.DOMAIN - ваш домен)
Всё, антиспам установлен. Боты уже не смогут определить путь отправки формы. Есть вопросы? Задавайте в комментарих внизу страницы.
При обновлении движка на новую версию потребуется повторно выполнить последний пункт инструкции -- активацию Антиспама. При полной переустановке движка -- нужно будет выполнить всю инструкцию полностью.
При повторном вызове файла YOUR.DOMAIN/modules/users/Antispam.php
предусмотрена возможность восстановления системных файлов движка. Не думаю, что она кому-то понадобится, но тем не менее, чтобы не складывалось ложного ощущения необратимости внесённых изменений, я её предусмотрел.
Для любителей внесения изменений вручную -- параграф ниже.
Ручная установка Антиспама
Данные указания могут устареть при обновлениях скрипта автоустановки. Однако, они останутся рабочими со своим базовым функционалом.
- Открываем файл /modules/users/integration_page.php и ищем поиском строку
if($Config->registration)
- Редактируем под найденной строкой код следующим образом:
<form action="/'.$URI[1].'/addreg" method="post" name="forma" onsubmit="if(document.getElementById('roscomnadzor').checked){this.submit();}else{alert('Нужно дать согласие на обработку персональных данных'); return false;}">
<form action="/pages/" method="post" name="forma">
- Далее по коду находим строку
}else{
и перед ней вставляем строки с кодом:
$return .= '<script>
(function(d) {
var form= d.querySelector(\'form[name="forma"]\');
if(!form) return;
form.onsubmit= function(e) {
e.preventDefault();
if(!d.getElementById(\'roscomnadzor\').checked){
alert(\'Нужно дать согласие на обработку персональных данных\');
return;
}
this.action= \'/user/addreg\';
console.log(this.action);
this.submit();
}
})(document);
</script>';
Комментарии ( 0 )
Комментариев пока нет.
Добавить комментарий