Этот вопрос много раз поднимался на этом заседании [ссылка необходима :)]
Это довольно сложный вопрос, но я думаю, что короткий ответ в том, что мы застряли на обычных методах!
Я думаю, что этот сайт решает проблему довольно хорошо, но, как всегда, я предполагаю, без ужасного ущерба для удобства пользователя, вы будете использовать CAPTCHA. Чем больше вы его используете, тем меньше спама вы получите, но по цене помните, что всегда есть ограничение на использование IP, когда определенный IP вовлечен в подозрительную деятельность.
Что касается проверки правильности вопроса, я сам попробовал себя на PHP, это выглядит примерно так:
<?php
$x = mt_rand(1,5);
$y = mt_rand(1,5);
function add($x, $y) { return $x + $y; }
function subtract($x, $y) { return $x - $y; }
function multiply($x, $y) { return $x * $y; }
$operators = array(
'add',
'subtract',
'multiply'
);
$rdno = $operators[array_rand($operators)];
$result = call_user_func_array($rdno, array($x, $y));
session_start();
$_SESSION['res'] = $result;
if ($rdno == "add") {
$whato = "+";
}elseif ($rdno == "subtract") {
$whato = "-";
} else {
$whato = "*";
}
$output = $x . $whato . $y . " = ";
$_SESSION['out'] = $output;
?>
<img src="image.php" />
<form name="input" action="check.php" method="post">
<input type="text" name="result" />
<input type="submit" value="Check" />
</form>
chech.php:
<?php
session_start();
if($_SESSION['res'] == $_POST["result"]){
echo "correct!";
$_MCAPTCHA = TRUE;
}else{
echo "incorrect";
$_MCAPTCHA = FALSE;
}
session_unset();
?>
и
<?php
session_start();
//image creation
// Create a 100*30 image
$im = imagecreate(100, 30);
// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);
// Write the string at the top left
imagestring($im, 5, 0, 0, $_SESSION['out'], $textcolor);
// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
Вы можете добавить к ней размытие по Гауссу и т. Д. И т. Д. -
Конечно, это только пример (НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТО :))
Но справедливо и представление о том, что можно сделать.
Плохая вещь в этом: если вы не хотите, чтобы пользователи выполняли сложную математику (что может подойти только некоторым аудиториям), у вас есть более ограниченные возможности, и, кроме того, если кто-то хочет нацелиться именно на ваш сайт, имея ограниченные возможности , может быть плохой идеей, так как очень уязвимы.
Подводя итог, ИМХО, вы застряли с обычной рекламой, придется жить с НЕКОТОРЫМ спамом, это просто компромисс, с которым вам, возможно, придется смириться.
Вы могли бы напечатать Статья Джеффа от ужаса кодирования, очень интересная.
Удачи !!