PHP обратная связь. Антиспам

Хочу настроить обратную связь, чтобы спам боты не присылали. знаю что они запросами фигачат. просто много спама приходит. Сразу скажи, что не силён в PHP. знаю что есть методы "нажатия клавиш", "невидимые" и "фейковые" блоки. но как реализовать в своём случае, не знаю.

Прошу помощи у знатоков php. Спасибо.

<section class="q222">
        <div class="q333">
            <h3 class="q444">Обратная связь</h3>
            <form class="form1" action="telegram.php" method="POST">
                <div class="form__group">
                    <input class="form__input" name="user_name" type="text" id="user_name" placeholder="Имя" required=""> </div>
                <div class="form__group">
                    <input class="form__input" name="user_phone" type="text" id="user_phone" placeholder="Телефон или e-mail" required=""> </div>
                <div class="form__group">
                    <textarea class="form__textarea" name="user_text" id="user_text" placeholder="Сообщение..." required=""></textarea>
                </div>
                <div class="text-right">
                    <button class="btn1" type="submit" style="color: white">Отправить</button>
                </div>
            </form>
        </div>
    </section>
<?php

/* https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXXX/getUpdates,
где, XXXXXXXXXXXXXXXXXXXXXXX - токен вашего бота, полученный ранее */

$name = $_POST['user_name'];
$phone = $_POST['user_phone'];
$email = $_POST['user_text'];
$token = "XXXXXXXXXXXXXXXXXXXXXXX ";
$chat_id = "-XXXXXXXXXX";
$arr = array(
  'Имя пользователя: ' => $name,
  'Телефон: ' => $phone,
  'Сообщение: ' => $email
);

foreach($arr as $key => $value) {
  $txt .= "<b>".$key."</b> ".$value."%0A";
};

$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");

if ($sendToTelegram) {

  echo "<html><head><meta http-equiv='Refresh' content='1; URL=index.html".$_SESSION['id']."'></head><body><style> body {text-align: center; font-size: 52px; font-family: 'Montserrat', sans-serif;width: 100%; padding:20px 1px 0;} </style>Вы будете перемещены через 1 сек.</body></html>";//отправляем пользователя назад
} else {
  echo "Error";
}
?>

Ответы (1 шт):

Автор решения: Тимур

Этот вариант подойдёт против элементарных ботов

Создаёте уникальный токен на главной странице, откуда будет идти запрос

$rand = rand(10000,99999);
$token = $rand.':'.md5($rand."Ваш уникальный ключ");

Передаёте его вместе с формой, например в hidden

<input type = "hidden" name = "token" value = <?=$token?> >

В файле, где принимаете запрос, уже проверяете валидность токена

$token = explode(':', $_REQUEST['token']);
$rand = $token[0];
$hash = $token[1];
if($hash != md5($rand."Ваш уникальный ключ")){
   die("Неверный токен");
}
→ Ссылка