Большого вреда это не приносило но база с данными засорялась и вводила в заблуждение менеджера который следит за посещаемостью сайта.
Решено приделать капчу к форме регистации, для настоящих подписчиков это не очень большое неудобство а от роботов какая ни есть а защита.
Написать капчу самостоятельно можно, но не нужно. Нет, конечно если в этом цель то конечно стоит ее написать самому.
Ну в общем желающие писать самому могут уже начинать а те кто готов использовать готовое решение продолжают читать далее.
В качестве готовой капчи я взял решение с сайта http://www.captcha.ru/
Качаем архив и начинаем разбираться.
Из полученного архива распаковываем файлики в директорию джумлы - components/com_registration
Файлик index.php переименовываем в cap.php. Зачем? А подумайте, а зачем нам в com_registration файл по имени index.php?
Для начала добавляем в registration.html.php следующие строки
<img src="cap.php">- это будет наша сгенерированая картинка
<input type="text" name="keystring">а сюда пользователь будет вводить текст что увидит на картинке.
Куда добавлять? Сказать вам номер строки? Нет не скажу, тогда вам и думать не надо будет, а это плохо влияет на моцк. Засыхает он. :-)
Одним словом добавлять надо в форму регистрации пользователя. Если вы хотите закрыть капчей еще и форму востановления пароля то нет проблем, можно добавить и туда.
Поскольку у роботов глаз нет (на самом деле они есть, речь идет о распознавании текста) то и прочитать они этот текст не смогут а стало быть и ввести правильный ответ тоже не смогут.
Ну едим дольше, теперь модифицируем файлик registration.php. тут немного надо посоображать.
И так начнем соображать от того момента как будет выводится в браузер содержимое файла registration.html.php. Допустим пользователь решил зарегистрироваться, ему в браузер выводится форма регистрации, когда парсер дойдет до строки с будет запушен на исполнение файла cap.php. Он сформирует изображение из буквенноцифрового кода а сам код будет записан в сессию.
Далее пользователь заполняет поля и вводит код который видит на картинке, нажимает кнопку сабмит и данные из формы уходят на сервер.
Анализ того что ввел пользователь происходит в файле registration.php.
Для начала стартуем сессию
session_start();
Проверяем равна ли переменная $task значению saveRegistration если да то проверяем существует ли в сессии переменная captcha_keystring и равна ли она тому что ввел пользователь в форме ($_POST['keystring'])?
Если это условие не выполняется то переменной $task присваиваем значение register и пользователь опять отправляется на регистацию. :-)
if($task=="saveRegistration"){
if(!(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])){
$task = "register";
}
}
да и незабываем уничтожить переменную
unset($_SESSION['captcha_keystring']);
Ну вот собственно и все!
Можно еще приделать механизм обновления картинки, потому как иногда она нечитаема даже для людей, не говоря уже о роботах.
Но это мы сделаем в другой раз!
3 комментария:
огромное спасибо!
Надо же, кому то помогло, очень рад.
Спасибо! Отличная статья! Нужная и актуальная!
А когда появится статья о механизме обновления рисунка captcha? Антон.
Отправить комментарий