Уголок веб-разработчика

сайт для веб-мастеров и веб-разработчиков


Реклама на сайте
как разместить свою рекламу?



Блог о веб-разработке!



Скрипт текстовой CAPTCHA для защиты от спам-ботов
(от 30.07.2012)

Автор:
Источник: /captcha.php

Практически каждый пользователь интернета регулярно сталкивается с CAPTCHA (в русском языке за этой аббревиатурой закрепилось существительное "капча"). В классическом случае CAPTCHA - это картинка, содержащая искаженные буквы и цифры, которые надо ввести в текстовое поле рядом для подтверждения того, что вы являетесь человеком, а не роботом, рассылающим спам. Существуют и более экзотические формы капчи, например, выполненные в форме теста, загадки или мини-игры. И все это ради защиты от автоматического заполнения форм роботами, рассылающими спам.

Классический внешний вид CAPTCHA показан на рисунке:

Классический внешний вид CAPTCHA
1. Защита от спама в соц.сети "ВКонтакте" . 2. reCAPTCHA.

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) - это полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей. Подробнее можно прочитать в Википедии.

Принцип работы CAPTCHA весьма прост. Пользователю демонстрируется задача (искаженная картинка, текст или что-то еще), которую человеческий мозг решает очень быстро и с большой вероятностью правильно. При этом решение такой задачи с помощью средств вычислительной техники либо очень трудоемко, либо сложно поддается алгоритмизации и, как следствие, требует огромных затрат на разработку решающей программы. После демонстрации задачи и получения ответа - ответ сравнивается с оригиналом и в случае его правильности, пользователю разрешается совершить действие - отправить форму с введенными данными на обработку. Спам-роботы же, на этом этапе как правило отсеиваются.

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

Принцип работы нашей CAPTCHA будет таким. Капча будет формировать в текущей сессии две переменные:
1. Вопрос в виде арифметического выражения a+b, где 2<=(a+b)<=10;
2. Ответ в виде хэша md5 от результата суммы N+M, записанного прописью, например, md5("четыре").

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

При проверке капчи из ответа пользователя надо будет также получать хэш md5.

Программный код скрипта текстовой CAPTCHA

Файл mycaptcha.php, содержащий программный код для генерации вопроса и ответа CAPTCHA.

<?php

	function GenerateCAPTCHA()
	{
		$nums = array("1"=>"один", "2"=>"два", "3"=>"три", "4"=>"четыре",
					  "5"=>"пять", "6"=>"шесть", "7"=>"семь", "8"=>"восемь", "9"=>"девять", 

"10"=>"десять");
		
		//	формируем пример a+b
		$rez = rand(2,10);			
		$a = rand(1,$rez-1);
		$b = $rez-$a;	
		
		// записываем в сессию вопрос a+b
		$_SESSION['mycaptcha_text']=$a." + ".$b;
		
		// записываем в сессию хэш ответа прописью
		$_SESSION['mycaptcha_string']=md5($nums[$rez]);
	}
	
?>

Файл index.php, содержащий пример обращения и использования нашей CAPTCHA в пользовательской форме

<?php
	session_start(); 			// запускаем сессию, она важна
	include ("mycaptcha.php"); 	// вызываем модуль генерации CAPTCHA
	
	if (!isset($_REQUEST['string'])) // если пользователь не ввел ответ, 
	{								 // формируем и выдаем ему вопрос
		generateCAPTCHA();
		echo "

Вопрос: ".$_SESSION['mycaptcha_text']."?

"; } else // иначе проверяем правильность ответа пользователя и выдаем результат { if (md5(mb_strtolower(trim($_REQUEST['string']),"utf-8")) == $_SESSION['mycaptcha_string']) echo "

Верно!

"; else echo "

Неверно!

"; } ?> <form method="POST"> Введите ответ прописью, например, "четыре":<br/> <input name="string"/> </form>

В условии

if (md5(mb_strtolower(trim($_REQUEST['string']),"utf-8")) == $_SESSION['mycaptcha_string'])
Перед тем, как получить хэш md5 - убираем излишние пробелы по краям пользовательского ответа (функция trim()) и приводим ответ к нижнему регистру (функция mb_strtolower()).

Сложность данного примера можно повысить, изменив строку в файле mycaptcha.php:

$_SESSION['mycaptcha_text']=$a." + ".$b;
на
$_SESSION['mycaptcha_text']=$nums[$a]." + ".$nums[$b];

В таком случае, вопрос a+b будет выводиться также прописью, что затруднит его считывание роботом.

Для того, чтобы пример работал корректно, необходимо:
1. Все файлы должны быть записаны в кодировке UTF-8.
2. Скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файл.

Скачать исходные файлы примера (2 кб):
/files/captcha.zip

Механизм CAPTCHA можно применять для защиты гостевых книг, комментариев, форм обратной связи от спама, а также для защиты форм регистрации от прохождения автоматических регистраций спам-ботами.

Хотите дополнить - пишите:

Статьи по теме

Делаем форму обратной связи на сайт с защитой от спама;
Скрипт для голосования своими руками на PHP и MySQL с использованием AJAX;
Гостевая книга своими руками на PHP и MySQL.
Гостевая книга своими руками на PHP и MySQL. Добавляем динамизма. AJAX + jQuery.






Анкеты индивидуалок Красноярска готовы исполнить все ваши желания. | Снять проститутку Чебоксар - это высокий уровень сервиса. | Индивидуалки Читы оказывают высококачественные услуги. | Индивидуалки Ялты готовы предложить вам интимные моменты, которые вы долго будете помнить. | Шлюхи в Орле - ваш ключ к незабываемому и страстному опыту. | Индивидуалки Мурманска готовы предложить незабываемый опыт и удовлетворение по самым высоким стандартам. | Индивидуалки Ставрополя позаботятся о вас и сделают все возможное, чтобы вы почувствовали себя особенным. | Если вы настроены решительно и хотите себе подобных, переходите на https://prostitutkiadleravip.net/proverennye/, где можно получить услуги проверенных проституток. | На https://prostitutkibarnaulasuck.com/elitnye/ вы сможете найти самых эксклюзивных проституток, готовых реализовать все ваши фантазии. | Ощутите неподдельное удовольствие от анального секса со специалистками на https://prostitutkibryanskawant.com/ – они знают, как доставить вам наслаждение. | Посетите https://prostitutkiastrahaninext.info/ и насладитесь анальным сексом с проститутками. | Для вашего удовлетворения встречайтесь с проститутками на https://prostitutkinizhnegonovgorodaexcite.info/. | Наслаждайтесь нежными и элитными проститутками на https://prostitutkinovogourengoyalucky.com/, чтобы почувствовать себя особенным. | На https://prostitutkitverilike.net/proverennye/ представлены только проверенные и надежные девушки для вас. | Сайт https://prostitutkipyatigorskasexy.com/ предлагает доступ к элитным проституткам, которые несомненно порадуют вас своими услугами. | Самые проверенные и качественные услуги можно найти на https://prostitutkivladivostokaneed.net/! | https://prostitutkivladimiragood.info/proverennye/ - это место, где вы найдете только проверенных и надежных проституток для вашего удовольствия. | Лучшие элитные проститутки доступны на https://prostitutkitaganrogatake.net/ по выгодным ценам. | Самый большой выбор проституток в России - https://prostitutkiirkutskalet.com/. | Ищете экономичные варианты? Закажите дешевых проституток через https://prostitutkivologdyreal.net/.

© 2008 - 2022 :: Codething.ru
При перепечатке и копировании статей с сайта указание автора и URL статьи обязательно!
Программный код, приведенный в статьях в качестве примеров, можно использовать без каких-либо ограничений.
Работоспособность, надежность и безопасность программного кода из примеров не гарантируется.