Форма с защитой от спама на 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="<?=$_SESSION['add'] ?>">
<INPUT TYPE="SUBMIT" value="Добавить сайт в черный список" /><br>
</form>
?>

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

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

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

Вас заинтересует:


.