Капча на php в виде математического примера

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

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

Чтобы нейтрализовать злоумышленников или хотя бы усложнить им жизнь, программисты ставят капчу – метод защиты при котором пользователю нужно подтвердить, что он человек. Например, в гугл капче придется искать картинки (и это жутко неудобно), а в других юзера могут заставить собирать мозайку, разгадывать картинку или решать математический пример. Рассмотрим, как сделать последний вариант.

Самое простое, что приходит на ум – две случайные переменные, которые должны складываться или вычитаться. Создайте index.php в UTF-8 без BOM и поместите в него такой код:

<?php header(‘Content-Type: text/html; charset=utf-8’);
$asdkapcha1 = mt_rand(11, 20);
$asdkapcha2 = mt_rand(1, 10);
$asdkapcha3 = mt_rand(1, 2);
if ($asdkapcha3 == 1) $asdkapcha3 = “+”;
if ($asdkapcha3 == 2) $asdkapcha3 = “-“;
$randkapcha = $asdkapcha1.$asdkapcha3.$asdkapcha2;
$randkapchasrav = $asdkapcha1.’,’.$asdkapcha3.’,’.$asdkapcha2;

if (isset($_POST[“butkapcha”])) {
$randkapchasravall = explode(‘,’, $_POST[“randkapchasrav”]);
if ($randkapchasravall[1] == “+”) $randkapchasravalls = $randkapchasravall[0] + $randkapchasravall[2];
if ($randkapchasravall[1] == “-“) $randkapchasravalls = $randkapchasravall[0] – $randkapchasravall[2];

if ($_POST[“randkapcha”] == $randkapchasravalls) {
echo “Все верно! Сообщение отправлено”;}
else echo “Не верно! Попробуйте снова.”;}
?>

<form action=”” method=”post” name=”forms”>
Сколько будет: <?php echo $randkapcha;?>?
<input type=”text” style=”width: 30px” name=”randkapcha” />
<input type=”hidden” name=”randkapchasrav” value=”<?php echo $randkapchasrav;?>” />
<input type=”submit” name=”butkapcha” value=”Отправить” >
</form>

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

В скрипте:

  • $asdkapcha1 и $asdkapcha2 – случайные числа. Их пределы вы можете регулировать как угодно.
  • $asdkapcha3 – генерирует знак операции.
  • $randkapcha – запись для вопроса пользователю, а $randkapchasrav – запись для сравнения

Этот скрипт получился очень небольшим и мне удалось использовать его без сессий. В прошлом я делал аналогичный, более сложный вариант, но он требовал сессии, что неудобно. При желании его можно оформить в виде функции. Все данные, которые пользователь должен решить, находятся в инпуте randkapchasrav, в формате через запятую. Если вас смущает, что знаки + и – так явно передаются в переменной, то вы можете вместо них использовать картинки для большей защиты.

На этом описание просто капчи заканчивается. Конечно, ее можно обойти, но для этого придется настроить робот именно на ваш сайт.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии