Новый вид защиты от спама — математика!

16 Апр
2012

Stop SpamНедавно работал над одним проектом и надо было сделать форму обратной связи, когда все было готово, оставалось только самое маленькое — защита от спама. Т.к. картинка капчи туда абсолютно не годилась, т.к. выглядела просто ужасно, было принято решение сделать все более элегантно. При помощи математики.


Идея


Вы можете сразу посмотреть демо, чтобы лучше понять о чем идет речь.

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

Усложняем задачу


В чистом виде этот метод не обеспечивает 100% защиты от спама. Для усложнения жизни хакерам, я придумал еще одну фишку. Можно рандомно заменять русские буквы, аналогичными с английской раскладки. Например заменять русскую О на английскую O и т.д.

Ближе к делу


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

Использование


Класс крайне прост в использовании. Для генерации фразы нужно использовать метод gen_question:
<?php
require('WordCaptcha.php');

$captcha = new WordCaptcha();

echo('Ответьте на вопрос: '.$captcha->gen_question(true));
?>

Данный метод принимает аргумент obfuscate, если он равен true, то скрипт выполняет рандомную замену русских букв на аналогичные английские.

Проверка правильности

Для этого существует метод validate. С его помощью вы сможете проверить правильность введения ответа пользователем.
<?php
require('WordCaptcha.php');

$captcha = new WordCaptcha();

if($captcha->validate())
  echo('Все верно!');
else
  echo('Введен неверный ответ на контрольный вопрос!');

$captcha->unset_session(); // Удаляем сессию
?>

Тут мы сначала проверяем правильность ответа, а затем удаляем сессию через метод unset_session. Почему следует использовать кастомный метод из класса а не просто unlink($_SESSION[‘name’])? Это на ваше усмотрение, просто я так сделал на тот случай если вы захотите изменить имя сессии($captcha->session_name = ‘new name’), тогда скрипт удалит нужную сессию.

Генерируемые значения


Скрипт генерирует вопросы так, что их решения будут всегда целыми числами, не меньше нуля и не больше 50(это настраивается через $captcha->limit).
Использует операции деления, умножения, сложения и вычетания.

Эпилог


В завершение хочу добавить, что данная схема защиты, является по-моему достойной заменой обыкновенной капче, хотя бы потому, что идеально вписывается в любую страницу!

Вот тут можно посмотреть демо, а скачать сам скрипт — на GitHub.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх