Есть несколько вариантов как защитить форму регистрации от спама. Во первых, вам необходимо вывести какое-то системное поле, которое мы будем скрывать. Выбрал PERSONAL_MOBILE – его нужно передать в параметрах компонента. В самом же компоненте скрываем его полностью, и проверять будем так – если там что-то есть, то это бот.
Вторая проверка будет на имя пользователя. Допустим, нас атакует спам, в имя пользователя постоянно записывает “Выиграйте 100$ на первую игру”. Проверять будем на кусок фразы “100$”.
// добавляем обработчик события при регистрации AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler"); AddEventHandler("main", "OnBeforeUserUpdate", "OnBeforeUserRegisterHandler"); function OnBeforeUserRegisterHandler($args) { AddMessage2Log($args); if (strstr($args['NAME'], '100$')) { $GLOBALS['APPLICATION']->ThrowException('Ошибка. Обратитесь к администратору!'); return false; } if ($arFields["PERSONAL_MOBILE"] != false) { $GLOBALS['APPLICATION']->ThrowException('Ошибка. Обратитесь к администратору!'); return false; } } AddEventHandler("main", "OnBeforeUserAdd", Array("MyClass", "OnBeforeUserAddHandler")); class MyClass { function OnBeforeUserAddHandler(&$arFields) { if(strlen($arFields["PERSONAL_MOBILE"])>0) { global $APPLICATION; $APPLICATION->throwException("Ошибка. Обратитесь к администратору!"); return false; } if (strstr($arFields['NAME'], '100$')) { global $APPLICATION; $APPLICATION->throwException("Ошибка. Обратитесь к администратору!"); return false; } } }
Добавим сразу целую кучу проверок, хотя могли обойтись OnBeforeUserAdd.