Сейчас: 00:42:53   20-го апреля 2024 г.
UsefulScript.ruСкриптыЗащита сайтаЗащита от спама цифрами
0
9

Защита сайта от спама сложением чисел

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


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


Текст:
38 + 8 =

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


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


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

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

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

Цитата:
<?php
$a 
rand(10,50);
$b rand(1,10);
$_SESSION[summ] = $a $b;
echo 
"<b>$_SESSION[message]</b>";
unset(
$_SESSION[message]);
?>

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

Как видно, это обычная форма за исключением добавления небольшого PHP кода для генерации случайных двух чисел и вычисления их суммы. Также мы выводим сгенерированные числа внутри формы строчкой: <td><?php echo "$a + $b = "; ?></td>.


О том, как защитить свой сайт от спама при помощи добавления случайного вопроса, читайте в другой нашей теме - Защита сайта от спама ответом на вопрос.

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

Комментарии посетителей (6 шт.):
Дмитрий
-1
# 2280
(18:44:18  27.02.2015 г.)

Здравствуйте, у меня не работает должным образом.
На чистом HTML - все OK, но когда вставляю на свою страницу, то не срабатывает, может быть надо прописать в обработчике формы, хотя нет.
Просьба пояснить, что делаю не так. Обработчик (message.php) у меня перед отправкой проверяет форму на правильность заполнения всех полей, email и в случае ошибки выдается предупреждение.
Как ко всему этому правильно подключить еще и этот скрипт, чтобы проверялся сайт от спама.
Буду благодарен за ваш ответ.
Ответить

Administrator
0
# 2282
(21:42:14  27.02.2015 г.)

В обработчик message.php добавьте верхний PHP код из данной темы.
В файл с формой вставьте следующий PHP код:
<?php
$a = rand(10,50);
$b = rand(1,10);
$_SESSION[summ] = $a + $b;
echo "<b>$_SESSION[message]</b>";
unset($_SESSION[message]);
?>
А в саму форму отправки сообщения - поле для ввода проверочного кода:
<?php echo "$a + $b = "; ?>
<input type="text" name="otvet">
Ответить

Дмитрий
0
# 2287
(17:59:17  28.02.2015 г.)

Доброе время суток.
Сделал, как описано выше, но ничего не происходит, при заполнении всех полей, письмо отправляется успешно. Поле для проверочного кода может быть пустым или заполненным, нет сообщения.
Для информации:
Если все поля заполнены правильно, то появляется страница об успешной отправке письма и через 5 сек. переходит на главную страницу:
$url_success_send = "<meta http-equiv='Refresh' content='5; url=http://sample.net'>";
Если неправильно заполнены поля, то появляется страница с предупреждением, что неверно заполнены поля и ссылка для перехода назад.
У меня подключается, как я и писал ранее message.php
<form method="post" action="message.php">
к которому подключается с помощью <?php include "check.php"; check.php, в котором прописаны стиль для отображения страницы и команды для сообщений в случае успешной или нет отправки письма, переход на главную страницу, email адрес, т.е. проверка контактной формы.
Добавлял, но нет результата, может быть и для двух файлов (message и check.php) необходимо прописать правила, а так получается, что у меня письмо отправляется успешно несмотря на то что поле для проверочного кода заполнено, нет никакого сообщения, если заполнено, например, неверно.
Заранее благодарен.
Ответить

Administrator
1
# 2292
(15:45:56  01.03.2015 г.)

Могу посоветовать Вам зарегистрироваться на нашем форуме и выложить там код целиком, тогда будет легче найти, в чем ошибка.
Ответить

Игорь
-1
# 4204
(10:45:01  26.12.2017 г.)

Доброго времени суток. Давно пользуюсь гостевой книгой: Sad Raven's + Denied Guestbook v2.1.6. Она мне нравится и вполне устраивает, за исключением защиты от спама - это ее слабая сторона. Ваш скрипт мне очень понравился, как решение проблемы защиты от спама. Вопрос. Подскажите, как добавить данный скрипт к указанной гостевой книге. Заранее благодарен.
Ответить

Евгений
0
# 4796
(07:35:52  23.02.2021 г.)

А если убрать эту строку:
header("Location: forms_protection_number.php"); //сбрасываем отправленное
exit();
а то у меня ошибку выводит!
Ответить

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

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

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

Какие темы необходимо добавлять на сайт?