Новая защита от ботов в формах

Не знаю насколько нова идея — но подумал и сразу изобразил.

Суть в том, чтобы пойти от обратного по идее — лишнее поле для бота. Только заполнять поле самим и на JavaScript. Если поле не приходит — значит POST или GET отправлялся напрямую. Ну и JS ещё не все умеют обрабатывать.

Конечно, не спасает от прицельной атаки на формочку.

<?
session_start ();
if (!$_SESSION['sum']) {
$_SESSION['k_1'] = rand (0,999);
$_SESSION['k_2'] = rand (0,999);
$_SESSION['sum'] = $_SESSION['k_1'] + $_SESSION['k_2'];
}

if ($_POST['name']) {
if (!$_SESSION['sum'] || !$_POST['key'] || $_SESSION['sum'] != $_POST['key']){
die ('BAD');
}
$_SESSION['sum'] = 0;
// некие дальнейшие действия
echo 'OK';
}
?>

<html>
<head>
<script>
eval (function (p,a,c,k,e,r){e=String;if (!''.replace (/^/,String)){while (c--) r[c]=k[c]||c;k=[function(e){return r[e]}];e=function (){return'\\w+'};c=1};while (c--) if (k[c]) p=p.replace (new RegExp ('\\b'+e©+'\\b','g'),k[c]);return p}('0 1 (){2.3 (\'4\').5=6+7}',8,8,'function|k|document|getElementById|key|value|<?=$_SESSION['k_1']?>|<?=$_SESSION['k_2']?>'.split ('|'),0,{}))
</script>
</head>
<body>
<form>
<input type='hidden' id='key' name='key'>
Введите имя: <input type='text' name='name'><br>
<input type='submit'>
</form>
</body>
</html>

2 комментария

  1. Ruslan.Step@gmail.com:

    Я начинающий блоггер и возможно я что-то не понял :-).

    Речь идёт от защиты от программ, рассылающих спам-комментарии? Или не о том?

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

    Не подскажете как с ними бороться?

    Спасибо.

Комментировать

Войдите чтобы оставить комментарий.