↩️ Назад

Категории

Как защитить форму от спама - инструкция

30.04.2026 | Статья из категории: Создание сайтов

Спам-боты постоянно сканируют сайты и атакуют формы обратной связи. Если ничего не делать — ваш почтовый ящик заполнится мусором. Вот 3 проверенных способа защиты, от простого к сложному.

⭐ Самый простой

Способ 1. Скрытые поля-ловушки

Боты обычно заполняют все поля в форме. Добавьте скрытые поля — человек их не видит и не заполняет, а бот оставляет след.

<!-- Добавьте в форму прямо перед кнопкой отправки -->
<input type="text" name="url" style="display:none" value="">
<input type="email" name="email" style="display:none" value="">

Проверка на сервере (PHP):

<?php
// Если скрытые поля заполнены — это бот
if (!empty($_POST['url']) || !empty($_POST['email'])) {
    die('Спам-бот обнаружен');
}
?>
Плюсы: Легко, быстро, не мешает пользователям.
Минусы: Защищает только от простых ботов.
📊 Средний уровень

Способ 2. Простой математический пример

Пользователь должен решить простой пример. Бот не умеет считать.

<!-- Добавьте в форму -->
<div style="margin: 15px 0;">
    <label>Сколько будет 2 + 5? <span style="color:red">*</span></label>
    <input type="text" name="captcha_answer" placeholder="Введите число" required size="5">
    <input type="hidden" name="captcha_num1" value="2">
    <input type="hidden" name="captcha_num2" value="5">
</div>

Проверка на сервере:

<?php
$answer = $_POST['captcha_answer'] ?? '';
$num1 = $_POST['captcha_num1'] ?? 0;
$num2 = $_POST['captcha_num2'] ?? 0;

if (($num1 + $num2) != $answer) {
    die('Неверный ответ на проверочный вопрос');
}
?>
Плюсы: Хорошо защищает, легко реализовать.
Минусы: Немного раздражает пользователей.
🏆 Профессиональный

Способ 3. Яндекс SmartCaptcha

Современная капча от Яндекса. Пользователь просто ставит галочку — бот не пройдет.

Шаг 1. Подключите скрипт:

<script src="https://smartcaptcha.yandexcloud.net/captcha.js" defer></script>

Шаг 2. Добавьте контейнер в форму:

<div id="captcha-container" class="smart-captcha" 
     data-sitekey="ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ">
</div>
<input type="hidden" name="smart-token" id="smart-token">

Шаг 3. Инициализация капчи:

<script>
document.addEventListener('DOMContentLoaded', function() {
    const container = document.getElementById('captcha-container');
    
    if (container && window.smartCaptcha) {
        window.smartCaptcha.render(container, {
            sitekey: 'ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ',
            callback: function(token) {
                document.getElementById('smart-token').value = token;
                // Включаем кнопку отправки
                document.querySelector('input[type="submit"]').disabled = false;
            },
            'expired-callback': function() {
                document.getElementById('smart-token').value = '';
            }
        });
    }
});
</script>

Шаг 4. Проверка на сервере (PHP):

<?php
$secretKey = 'ВАШ_СЕКРЕТНЫЙ_КЛЮЧ'; // Получите в консоли Яндекс.Облака
$token = $_POST['smart-token'] ?? '';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://smartcaptcha.yandexcloud.net/validate');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'secret' => $secretKey,
    'token' => $token,
    'ip' => $_SERVER['REMOTE_ADDR']
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
if (!isset($result['status']) || $result['status'] !== 'ok') {
    die('Капча не пройдена');
}
?>
Плюсы: Надёжная защита, удобно для пользователей.
Минусы: Требует регистрации в Яндекс.Облаке.

⚡ Комбинированный метод (рекомендую)

Лучше всего использовать сразу два способа: скрытые поля + капчу. Так вы защититесь и от простых, и от умных ботов.

<!-- Полный пример защищённой формы -->
<form method="post" action="/send.php">
    
    <!-- Обычные поля -->
    <input type="text" name="name" placeholder="Ваше имя" required>
    <input type="email" name="email" placeholder="Email" required>
    <textarea name="message" placeholder="Сообщение"></textarea>
    
    <!-- Скрытые поля-ловушки -->
    <input type="text" name="url" style="display:none" value="">
    <input type="email" name="email2" style="display:none" value="">
    
    <!-- Капча -->
    <div id="captcha-container" class="smart-captcha" 
         data-sitekey="ВАШ_КЛЮЧ"></div>
    <input type="hidden" name="smart-token" id="smart-token">
    
    <button type="submit">Отправить</button>
</form>
⚠️ Важно! Никогда не полагайтесь только на JavaScript-проверки — бот их легко обходит. Всегда проверяйте капчу на сервере!

📌 Что запомнить

  • Обычные боты пасутся на скрытые поля — используйте их
  • Умные боты не умеют решать примеры — добавьте математику
  • Профессиональную защиту даёт Яндекс/Google капча
  • Все проверки обязательно дублируйте на сервере
🎯 Мой совет: Для небольшого сайта хватит скрытых полей и простой математики. Если спама много — ставьте Яндекс SmartCaptcha.



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA