Битрикс: Защита от спама регистраций пользователей без капчи

0 из 5, голосов: 0
277
Метод рабочий, статья в процессе оформления.
Создаем дополнительное поле в стандартной форме регистрации, для этого:

- Перехрдим к "Список пользователей"
- Нажимаем на любого
- Нажимаем "Доп. поля"
- Нажимаем "Добавить пользовательское поле"
* Название я написал "UF_STRING"
* Тип данных выбираем "Строка"
* Ставим галочку "Обязательное"
* Ставим галочку "Не разрешать редактирование пользователем"

Теперь в форме регистрации появилось дополнительное поле UF_STRING


Копируем все содержимое директории:

Из: bitrix/components/bitrix/system.auth.registration/templates/.default

В: local/templates/.default/components/bitrix/system.auth.registration/.default

Теперь у нас есть доступ к форме регистрации и ее полям (по новому пути).

В самый низ файла с формой: local/templates/.default/components/bitrix/system.auth.registration/.default/template.php

Вставляем:


<script>
$(function() {
    $("input[name='UF_STRING']").val("<?php echo time(); ?>");
});
</script>
- этот скрипт проставляет у нового поля с name = UF_STRING значение текущего серверного времени в секундах.

И скрываем в форме новое поле:
В блоке "********************* User properties ***************************************************"
Присваиваем: style="display: none; visibility: hidden;" двум <tr> в этом блоке
В файл bitrix/php_interface/init.php добавляем:


// добавляем обработчик события при регистрации
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");

// описываем саму функцию
function OnBeforeUserRegisterHandler(&$arFields) { $time_add_form = $arFields["UF_STRING"];//время начала заполнения формы $time_add_script = time();//текущее время //если из формы не поступило время начала заполнения формы //или форма заполнялась <= 10 секунд if (($time_add_form=='') or (($time_add_script - $time_add_form) <= 10) ) { $GLOBALS['APPLICATION']->ThrowException('Зафиксировано автоматическое заполнение!!! Подождите после заполнения формы 10-20 секунд, поводите мышкой или пальчиком по экрану и потом нажимайте РЕГИСТРАЦИЯ.'); return false; } }
Очень хорошо расписаны шаблоны регистрации: https://tokmakov.msk.ru/blog/item/167

Событие регистрации пользователя описано здесь: https://dev.1c-bitrix.ru/api_help/main/events/onbeforeuserregister.php



[0.007484]