AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Форма с защитой от спама на PHP без картинки

Создавая черный список сайтов, я по старинке опять на форму хотел добавлять каптчу....

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

Итак, рассмотрим ситуацию вечной борьбы спамера и пользователя. Как защититься от одного и не навредить второму?

И тут возникла мысль... ведь спам рассылают роботы, которые "не держат сессию"! Выход найден! Все, что требуется, у пользователя должен быть включен javascript и он должен принимать куки.

<?
session_start();
if(!isset($_SESSION['add'])) {
   $_SESSION['add']=rand(1000,999999);
   if(isset($_POST['add']))
     die('Разрешите куки, иначе вы не сможете добавить объявление!');
}

if(isset($_POST['add'])){
  if (intval($_POST['add'])!=intval(@$_SESSION['add'])){
     // ставлю новое значение, чтоб не спамили перебором
     $_SESSION['add']=rand(1000,999999);
     die('Разрешите javascript и куки, иначе Вы не сможете добавить информацию!');
  }else{
     // здесь спокойно пишу данные в базу
  }
}
?>
<p>Форма отправки, из которой я удалил лишнее:</p>
<form name='form' method='post'>
icq: <input type=text name="icq" size=15><br>
<input type="hidden" name="add" value="&lt;?=$_SESSION['add'] ?>">
<INPUT TYPE="SUBMIT" value="Добавить сайт в черный список" /><br>
</form>
?>

Я устанавливаю сесионную переменную в случайное число и отправляю его пользователю в скрытом поле формы. На период этой сесии число остается постоянным, даже если пользователь откроет страницу в другом окне.

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

В качестве дальнейшего усложнения, можно переменную инициализировать правильным значением из Javascript. А изначально присваивать неверное значение. Это на случай, если спамер будет сохранять сесию, но не поддерживать javascript.


.

© Copyright 2008-2016 by KDG