Стандартная капча от Битрикса, не смогла защитить от массовой регистрации левых пользователей. Было решено заменить ее на recaptcha от Гугла.
Замена стандартной капчи Битрикс на recaptcha (форма регистрации)
13.03.2019
В файлах формы для регистрации Юр и Физ лиц (bitrix/templates/.default/components/bitrix/main.register/template_reg_yur1/template.php и bitrix/templates/.default/components/bitrix/main.register/template_reg_fiz1/template.php)
Закомментировал:
/* CAPTCHA */ if ($arResult["USE_CAPTCHA"] == "Y") { ?> <tr> <td colspan="2"><b><?=GetMessage("REGISTER_CAPTCHA_TITLE")?></b></td> </tr> <tr> <td></td> <td> <input type="hidden" class="inner_sing_up_input input_style" name="captcha_sid" value="<?=$arResult["CAPTCHA_CODE"]?>" /> <img src="/bitrix/tools/captcha.php?captcha_sid=<?=$arResult["CAPTCHA_CODE"]?>" width="180" height="40" alt="CAPTCHA" /> </td> </tr> <tr> <td><?=GetMessage("REGISTER_CAPTCHA_PROMT")?>:<span class="starrequired">*</span></td> <td><input type="text" class="inner_sing_up_input input_style" name="captcha_word" maxlength="50" value="" /></td> </tr> <? } /* !CAPTCHA */
а вместо этого вставил:
<tr> <td colspan="2"><b><?=GetMessage("REGISTER_CAPTCHA_TITLE")?></b></td> </tr> <tr> <td colspan="2"> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <div class="g-recaptcha" data-sitekey="PABLIC_KEY"></div> </td> </tr>
Также в компоненте проверки регистрации (/bitrix/components/bitrix/main.register/component.php) заменил код:
// check captcha if ($arResult["USE_CAPTCHA"] == "Y") { if (!$APPLICATION->CaptchaCheckCode($_REQUEST["captcha_word"], $_REQUEST["captcha_sid"])) $arResult["ERRORS"][] = GetMessage("REGISTER_WRONG_CAPTCHA"); }
на:
// check captcha if ($arResult["USE_CAPTCHA"] == "Y") { if (!recaptchaCheck()) $arResult["ERRORS"][] = 'Вы не прошли автоматическую защиту от спама'; }
и в начало файла добавил функцию recaptchaCheck из статьи Добавляем recaptcha v2 на сайт, php
TODO: - переделать этот пункт, т.к. при обновлении CMS этот файл затрется.