Модуль Антиспам без CAPTCHA от CleanTalk для 1С:Битрикс позволяет помимо защиты описанных форм легко изготовить защиту любой формы.
Методы модуля были написаны специально с учетом возможного расширения функционала.
Здесь я приведу пример, как это сделать.
Предположим, вам нужно проверить на спам форму со следующими полями: адрес электронной почты, псевдоним, должность и сообщение.
Все, что вам нужно сделать, это разместить код вызова метода CleantalkAntispam::CheckAllBefore с необходимыми параметрами в /bitrix/php_interface/init.php .
/bitrix/php_interface/init.php
На самом деле код очень простой: сбор параметров из формы, вызов проверки, анализ результата.<Эphp /* You can place here your functions and event handlers AddEventHandler("module", "EventName", "FunctionName"); function FunctionName(params) { //code } */ AddEventHandler('form', 'onBeforeResultAdd', 'my_onBeforeResultAdd'); CModule::IncludeModule('cleantalk.antispam'); function my_onBeforeResultAdd($WEB_FORM_ID, $arFields, $arrVALUES) { $ct_status = COption::GetOptionString('cleantalk.antispam', 'status', '0'); if ($ct_status == 1) { global $APPLICATION; $aParams = array(); $aParams['type'] = 'comment'; $aParams['sender_email'] = isset($arrVALUES['email']) ? $arrVALUES['email'] : ''; $aParams['sender_nickname'] = isset($arrVALUES['nickname']) ? $arrVALUES['nickname'] : ''; $aParams['message_title'] = isset($arrVALUES['title']) ? $arrVALUES['title'] : ''; $aParams['message_body'] = isset($arrVALUES['message']) ? $arrVALUES['message'] : ''; $aResult = CleantalkAntispam::CheckAllBefore($aParams, FALSE); if (isset($aResult) && is_array($aResult)) { if ($aResult['errno'] == 0) { if ($aResult['allow'] == 1) { //Not spammer - just return; return; } else { if (preg_match('http://u', $aResult['ct_result_comment'])) { $err_str=preg_replace('/^[^\*]*?\*\*\*|\*\*\*[^\*]*?$/iu','',$aResult['ct_result_comment']); $err_str=preg_replace('/<[^<>]*>/iu', '', $err_str); } else { $err_str=preg_replace('/^[^\*]*?\*\*\*|\*\*\*[^\*]*?$/i','',$aResult['ct_result_comment']); $err_str=preg_replace('/<[^<>]*>/i', '', $err_str); } $APPLICATION->ThrowException($err_str); return false; } } } } } ?>
Именно так сделаны все методы самого модуля для проверки форм.
Если необходимо добавить защиту для следующей формы, которая нужна клиентам, мы просто добавляем метод, аналогичный приведенному выше.
Убедиться в этом можно, посмотрев сам код модуля.
Параметр $WEB_FORM_ID не отмечен, его проверку можно добавить при необходимости.
Обратите внимание, что при проверке внутри функции CleantalkAntispam::CheckAllBefore() Используется тест JavaScript. Тестовый код автоматически устанавливается на страницы сайта при включении модуля (в том числе в настройках модуля) и вызове CleantalkAntispam::CheckAllBefore() Это также необходимо сделать, когда модуль включен, иначе тест JavaScript завершится неудачно.
Также обратите внимание, что флаг ответа здесь не анализируется.
$aResult['stop_queue'] .
Этот флаг указывает на явный спам и используется, например, при одобрении комментариев: если он установлен, комментарий отклоняется, если отклоняется, он отправляется на ручную модерацию.
Вы можете легко добавить такую проверку самостоятельно.
Дополнительная информация об API CleanTalk здесь .
Теги: #спам #Битрикс #антиспам #информационная безопасность #1С-Битрикс
-
Обзор Топ-3 Игровых Консолей
19 Oct, 24