pborisenko/spam-protection

There is no license information available for the latest version (0.2.3) of this package.

Tools pack from protect your web forms

0.2.3 2025-04-23 14:13 UTC

This package is auto-updated.

Last update: 2025-06-23 14:42:27 UTC


README

Свой опыт по защите веб-форм от спам атак оформляю в PHP-пакет для оперативного развёртывания решений на различных проектах и PHP фреймворках.

Установка пакета

composer require pborisenko/spam-protection

SmartCaptcha

Одним из самых простых и эффективных решений по защите веб-форм представлено технологией SmartCaptcha от Yandex. Данный пакет содержит простое решение для использования технологии в вашем проекте. Подробнее об использовании технологии в официальной документации Yandex SmartCaptcha.

Конфигурация

Bitrix Framework

Необходимо разместить в файле bitrix/.settings_extra.php следующую структуру.

'smart_captcha' => [
    'value' => [
        'sitekey' => '<ключ клиентской части>',
        'serverkey' => '<ключ серверной части>',
        'endpoint' => 'https://smartcaptcha.yandexcloud.net/validate',
        'scriptsource' => 'https://smartcaptcha.yandexcloud.net/captcha.js',
        'shieldposition' => 'bottom-right',
        'hideshield' => false,
        'debug' => false
    ],
    'readonly' => true,
]

Использование

Для начала необходимо подключить JS скрипт капчи на страницу. Используйте средства вашего фреймворка и метод пакета для получения URL адреса для загрузки JS скрипта.

Bitrix Framework

use Bitrix\Main\Page\Asset;
use Bitrix\Main\Config\Configuration;
use PBorisenko\SpamProtection\SmartCaptchaConfig;

$captchaConfig = SmartCaptchaConfig::apply(Configuration::getValue('smart_captcha'));
Asset::getInstance()->addJs($captchaConfig->getScriptSource());

Отредактируйте код веб-формы, добавив к ней вывод контейнера капчи.

use Bitrix\Main\Config\Configuration;
use PBorisenko\SpamProtection\SmartCaptcha;
use PBorisenko\SpamProtection\SmartCaptchaConfig;

SmartCaptcha::activate(
    '<идентификатор контейнера>',
    SmartCaptchaConfig::apply(Configuration::getValue('smart_captcha'))
);

Отредактируйте обработчик запроса, добавив проверку токена на валидность.

use Bitrix\Main\Config\Configuration;
use PBorisenko\SpamProtection\SmartCaptcha;
use PBorisenko\SpamProtection\SmartCaptchaConfig;

$isValidToken = SmartCaptcha::check(
    '<ваш токен>',
    SmartCaptchaConfig::apply(Configuration::getValue('smart_captcha'))
);

if ($isValidToken) {
    // код обработчика в случае валидного токена
} else {
    // код обработчика во всех остальных случаях
}

Использование невидимой капчи

При выводе контейнера в веб-форме необходимо явно указать модификатор режима INVISIBLE.

use Bitrix\Main\Config\Configuration;
use PBorisenko\SpamProtection\SmartCaptcha;
use PBorisenko\SpamProtection\SmartCaptchaConfig;

SmartCaptcha::activate(
    '<идентификатор контейнера>',
    SmartCaptchaConfig::apply(Configuration::getValue('smart_captcha')),
    SmartCaptcha::INVISIBLE
);

Обязательно измените ваш обработчик формы (событие submit), таким образом, чтобы перед отправкой запроса была выполнена проверка на наличие токена и запуск проверки пользователя, если токен отсутствует.

jQuery

const form //объект формы в DOM-дереве

$.ajax({
    type: "POST",
    url: '<адрес запроса>',
    data: '<тело запроса>',
    beforeSend: function (xhr, settings) {
        if (window.smartCaptcha && form.find('input[name="smart-token"]').val().length == 0) {
            window.smartCaptcha.execute(form.find('[data-wid]').attr('data-wid'));
            return false;
        }					
    },
    success: function (data) {/*обработчик ответа*/}
});

Поддержка jQuery плагина FancyBox

Если веб-форма открывается в всплывающем окне, используйте режимы FANCYBOX_VISIBLE или FANCYBOX_INVISIBLE для капчи с виджетом или невидимой капчи соответственно.

use PBorisenko\SpamProtection\SmartCaptcha;

SmartCaptcha::FACYBOX_VISIBLE;
SmartCaptcha::FANCYBOX_INVISIBLE;