Могу сделать всё, но времени не хватает
Меню

Антиспам для Регистрации

Движок #MyEngine CMS обладает встроенным модулем для регистрации новых пользователей. Но в официальном чате стали появляться жалобы на массовую регистрацию спам-ботов через него.

Штатная каптча, размещённая в форме для регистраций, ситуацию никак не меняет. Боты сумели её обойти. В данной статье я приведу небольшой фикс, позволяющий отсечь изрядную часть спамеров. Идея реализации такой скрытой защиты не нова, но адаптирована именно для модуля Регистраций.

Автоматическая установка Антиспама

Инструкция

  1. Скачать файл Antispam.php
  2. Загрузить его в директорию /modules/users вашего сайта (модуль users)
  3. Активировать, запустив из браузера -- YOUR.DOMAIN/modules/users/Antispam.php (YOUR.DOMAIN - ваш домен)

Всё, антиспам установлен. Боты уже не смогут определить путь отправки формы. Есть вопросы? Задавайте в комментарих внизу страницы.

При обновлении движка на новую версию потребуется повторно выполнить последний пункт инструкции -- активацию Антиспама. При полной переустановке движка -- нужно будет выполнить всю инструкцию полностью.

При повторном вызове файла YOUR.DOMAIN/modules/users/Antispam.php предусмотрена возможность восстановления системных файлов движка. Не думаю, что она кому-то понадобится, но тем не менее, чтобы не складывалось ложного ощущения необратимости внесённых изменений, я её предусмотрел.

Для любителей внесения изменений вручную -- параграф ниже.

Ручная установка Антиспама

Данные указания могут устареть при обновлениях скрипта автоустановки. Однако, они останутся рабочими со своим базовым функционалом.

  1. Открываем файл /modules/users/integration_page.php и ищем поиском строку if($Config->registration)
  2. Редактируем под найденной строкой код следующим образом:
    <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">
  3. Далее по коду находим строку }else{ и перед ней вставляем строки с кодом:
  4. 
    		$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 )

Комментариев пока нет.

Добавить комментарий
Политика конфиденциальности
Used PHP-7.4.16 Technical Info base :

Page generation - 3.7ms | Memory usage - now ( 540) max (556) kB