Сейчас: 04:16:21   26-го апреля 2024 г.
UsefulScript.ruСкриптыЗащита сайтаЗащита от спама вопросом
1
15

Защита сайта от спама ответом на вопрос

Предлагаем Вам простейший способ защитить свой сайт (или гостевую книгу) от спама. Сделать это можно при помощи задания посетителю простого вопроса, на который он должен будет ответить. Сразу скажем, что данный скрипт не дает стопроцентной защиты от спама, но в то же время позволяет отсечь значительную часть спам-ботов.


Обратите внимание на форму, расположенную ниже, где предлагается ответить на вопрос.


Текст:
Столица России

Как видите, для того чтобы отправить текст, необходимо ответить на простой вопрос, который при каждом обновлении странички выбирается случайным образом. Плюсом является то, что в исходном коде странички нет ответа, т.к. ответ хранится в переменной сессии.


Если ввести неправильный ответ на вопрос, то появится сообщение "Дан неверный ответ!" и отправленный текст не будет обработан на сервере.


Давайте теперь рассмотрим код, который реализует такую простейшую защиту от ботов спамеров при помощи вопроса. Код состоит из двух частей: кода обработки отправленных данных и кода формы для отправки текста. Для начала приведем код обработки отправленных данных, который необходимо разместить в самом начале странички до вывода на экран любой информации:

PHP код:
<?php
session_start
();
if (
$_POST[submit]){
 if (
mb_strtolower(trim($_POST[otvet]), 'UTF-8') == $_SESSION[otvet]) {
  
$_SESSION[message] = '<span style="color: blue">Ответ правильный!</span>';
  
// Тут обработка поступившего сообщения из поля text
 
}
 else {
  
$_SESSION[message] = '<span style="color: red">Дан неверный ответ!</span>';
 }
header("Location: forms_protection_question.php");    //сбрасываем отправленное
exit();
}
?>

Далее идет сама форма с вопросом, через которую и был отправлен некоторый текст:

Цитата:
<?php
$question 
= array(array('Столица России''москва'),    //вопросы и ответы
                  
array('Спутник Земли''луна'),
                  array(
'Земля вращается вокруг своей ...''оси'),
                  array(
'Семь раз отмерь, один раз ...''отрежь'));
$key rand(0count($question)-1);        //ключ
$_SESSION[otvet] = $question[$key][1];    //ответ
echo $_SESSION[message];
unset(
$_SESSION[message]);
?>

<
form method="POST" action="forms_protection_question.php">
 <
table style="margin: 0 auto;">
  <
tr>
    <
td>Текст: </td>
    <
td><input type="text" name="text"></td>
  </
tr>
  <
tr>
    <
td><?php echo $question[$key][0]; ?></td>
    <
td><input type="text" name="otvet"></td>
  </
tr>
  <
tr>
    <
td></td>
    <
td><input type="submit" name="submit" value="Отправить"></td>
  </
tr>
 </
table>
</
form>

Количество вопросов можно сделать гораздо больше и со временем рекомендуется их менять. Ответ пользователя автоматически приводится к нижнему регистру, чтобы уменьшить количество ошибок, поэтому ответы к вопросам в скрипте нужно писать в нижнем регистре. Данный скрипт является чуть более сложным по сравнению со скриптом, в котором необходимо складывать или вычитать числа.


О том, как защитить свой сайт от спама, при помощи простого арифметического действия (сложения или вычитания чисел), читайте в нашей теме - Защита сайта от спама сложением чисел.

Дата создания: 23:59:56 04.11.2012 г.
Посещений: 16128 раз(а).

Комментарии посетителей (3 шт.):
yes_59
0
# 2173
(20:11:18  09.01.2015 г.)

Доброго времени суток! Вот хорошо добавить возможность обновить вопрос. Спасибо!
Ответить

Administrator
2
# 2174
(20:41:55  09.01.2015 г.)

А что Вы подразумеваете под "добавить возможность обновить вопрос"?
Если это как обновить капчу без перезагрузки страницы, то тогда придется использовать jQuery. Если же Вы имеете ввиду обновление списка самих вопросов и ответов, то просто измените их в массиве и все.
Ответить

PHP
0
# 2350
(15:40:08  24.03.2015 г.)

Как подключить другую кнопку (кнопка сайта), кнопку регистрации, например?
Ответить

Закрыть
Ваше имя:
881 + 10 =
Добавить комментарий:
Ваше имя:
881 + 10 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 7

Мешает ли Вам реклама?