Пример класса captcha на php (2)


Содержание

CAPTCHA на PHP: реализация скрипта каптчи на php

Сегодня мы поговорим о создании скрипта генерации случайной комбинации цифр на картинке, средствами php. Или, как принято сейчас говорить каптча (captcha). Для написания каптчи на php, нам понадобиться создать всего лишь один файл, что очень просто и удобно при его дальнейшем использовании.

Что такое CAPTCHA?

CAPTCHA (от англ. completely automated public Turing test to tell computers and humans apart — полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей). Человеческим языком, каптча это тест, который определяет, является ли пользователь роботом или человеком. Достигается это, как правило, с помощью картинки с искаженными символами, которые способен прочитать только человек.

Принцип работы каптчи на PHP

Решения реализации captchaна php могут быть разными. Я организовал это с помощью сессий ($_SESSION). При выводе картинки (каптчи) генерируется код, который записывается в сессии, а при проверке сравнивается соответствие кода с картинки и предварительно записанного в сессию. На мой взгляд, это просто и удобно, если вы не согласны, подскажите как лучше, в комментариях к статье.

А теперь рассмотрим практическую сторону.

Шаг 1 – Создание файла каптчи: captcha.php

Ниже предоставлен код этого файла:

session_start(); — запускаем сессию в PHP.

header(«Content-type: image/gif»); — нашакартинка (каптча) будетв GIF формате.

$code = rand(100, 999); — Генерируем случайный трехзначный цифровой код. Как вариант можно и буквенный, это уже тонкости вашего желания.

$color1 = rand (10, 200); $color2 = rand (10, 200); $color3 = rand (10, 200); — Генерациякодацвета цифр (1 – R, 2 – G, 3 – B). Почему диапазон 10-200, а не 0-255? Что-бы не было черных и белых цветов. Хотя, все зависит от вашего мастерства, можете реализовать разные цвета для каждого символа.

$_SESSION[‘code‘] = $code; — Записываем сгенерированный код в переменную сессии.

$rgb=0xffffff; — Цвет заливки фона изображения (каптчи).

$txt_box=imagettfbbox(18, 0, «lib/font.ttf«, $code); — создаем текстовый слой в котором код нашей каптчи. Как видите, подключаем шрифт (font.ttf) из папки lib, 18 – это размер шрифта, 0 – это угол поворота текста (мы поворачивать не будем), $code – это текст каптчи. Этот слой создается для того, что-бы вычислить в дальнейшем вычислить в пикселях размеры текстового блока.

$box_height=($txt_box[1]+$txt_box[3]+$txt_box[5]+$txt_box[7])/2;

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

$img = imagecreatetruecolor($box_width+1,$box_height+1); — создаем изображение, немножко большее нашего текстового блока.

imagefill($img, 0, 0, $rgb); — заливаем его цветом указанным раньше.

imagettftext($img, 18, 0, 1, $box_height-2, imageColorAllocate($img, $color1,$color2,$color3), «lib/font.ttf«, $code); — вот собственно налаживаем текст на изображение $img, 18 – размер шрифта, 0 – угол наклона, 1 – позиция текста по X, $box_height-2 – позиция текста по Y, далее указываем цвет наших символов, путь к шрифту .ttf, и собственно текст каптчи.

imagegif($img); — выводим изображение на монитор.

imagedestroy($img); — очищаем память, после вывода изображения.

Данный скрипт, будет восприниматься, как обычная картинка.

Шаг 2 – Применение captcha.php

В практическом применении скрипта captcha, нам необходимо вывести картинку и поле ввода, для текста. Вот пример:

Пример моей captcha (форма добавления сообщения в гостевой книге):

Само собой помещаем HTML код в вашу форму, которая например, будет ссылаться на add.php. В этом файле будем проверять соответствия введенных данных пользователем. Пример кода add.php подан ниже:

Заключение

Надеюсь, вы поняли принцип работы captcha php скрипта. Если у вас остались вопросы или недопонимания по поводу реализации captcha на php, вы можете задать вопрос в комментариях.

Капча на PHP

Капчу на PHP, или проверочный код, позволяющий отличить человека от робота, каждый из Вас вводил многократно: при регистрации, при отправлении сообщения, при поиске на сайте и много, где ещё. И в этой статье мы с Вами разберём скрипт, реализующий капчу на PHP, а также я Вам покажу, как использовать данный скрипт.

Сначала скачайте скрипт капчи на PHP. Извлекайте архив и помещайте его на Ваш сайт.

Теперь о том, как добавить капчу на форму, например, на форму регистрации:

В результате, на форме регистрации Вы увидите проверочный код, который пользователь должен будет ввести. Теперь о том, как проверить правильность ввода. Для этого в файле «register.php» (или в другом файле, который указан в атрибуте «action«) пишем следующие строки:

session_start();
if($_POST[‘kapcha’] != $_SESSION[‘rand_code’]) echo «Капча введена неверно»;
else echo «Капча введена верно»;

То есть считываем то, что ввёл пользователь ($_POST[‘kapcha’]) и сравниваем с тем, что находится в сессии (данное значение было записано при генерации капчи). Если значения не совпадают, то делаем вывод, что капча введена неправильно, иначе делаем вывод, что капча введена верно. То есть дальше Вы можете, основываясь на результат сравнения выполнить определённые действия. Например, зарегистрировать пользователя или отправить его вновь на форму регистрации, хотя, безусловно, это зависит от Вашей задачи.

Если Вы хотите научиться самостоятельно создавать подобные скрипты, то посмотрите мой Видеокурс «PHP и MySQL с Нуля до Гуру«: http://srs.myrusakov.ru/php

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 61 ):

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

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

    А зачем тогда капча вообще нужна?

    Для защиты от авторегистраций. А вдруг кому-нибудь понадобится? Это Вам кажется, что капча очень лёгкая, уверяю, что разработать подобный алгоритм распознавания очень тяжело, поэтому человек передумает заниматься авторегистрацией на моём сайте.

    Я немного усовершенствовал рисунок (сделал его меньше по высоте на 10 пикселей) и теперь нижние хвосты немного обрезаны. Такие, как «j» сканер определяет как «i», а «y» как «v», «p» как «o» или «D» ну и так далее. Просто нижняя часть скрыта настолько, что человек поймет, какая это буква, а fine reader нет :)

    А я вобщем просто не заморачивался и скачал другой шрифт с корявыми буквами, в коде заменил verdana.tff на название моего шрифта и всё =)

    В какое место вставить session_start(); if($_POST[‘kapcha’] != $_SESSION[‘rand_code’]) echo «Капча введена неверно»; else echo «Капча введена верно»; Обратная связь

    2 варианта капчи для сайта

    Дата публикации: 2011-11-15

    От автора: интернет вещь хорошая, удобная, полезная, но… было бы совсем замечательно, если бы там не было спамеров. Думаю, все мы сталкивались с таким неприятным явлением, как спам. Это могут быть спамовые письма, спамовые комментарии, в общем, различный мусор. Если на Вашем сайте есть форма обратной связи или система комментариев и Ваш ресурс станет довольно популярным, то ему не избежать внимания спамеров. Эффективной защитой от спама является проверка на человечность — капча.

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

    План урока:

    1. Постановка задач (8:01)

    2. Алгоритм капчи №1. Начинаем реализацию (14:56)

    3. Реализуем капчу с математическим выражением (12:03)

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    4. Реализуем капчу вопрос-ответ (17:49)

    1. Постановка задачи


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

    Для того, чтобы не отправлять сообщения, заполненные ботами придуман не один способ. Наверное, самым первым и наиболее известным является CAPTCHA (аббревиатура, обозначающая приблизительно следующее — «автоматизированный тест для различия компьютеров и людей»)… но вместе с тем — это самый неудобный для пользователя вариант (на мой взгляд). Думаю, многие сталкивались с заполнением капчи — иногда приходится буквально «расшифровывать» ее, гадая — что же это за символ? Вроде расшифровал, вводишь… получаешь сообщение, что заполнено неверно… начинаем заново наши потуги на поприще дешифрования… иногда вообще методом тыка догадываешься, что разработчики именно этой капчи учитывают еще и регистр символов, но при этом, ни слова не сказали об этом… появляется при этом стойкое желание назвать таких разработчиков нехорошим словом.

    Илон Маск рекомендует:  Что такое код mssql_init

    Да и к тому же на сегодня капча не является уже надежной защитой от автоматического заполнения формы или автоматической регистрации — боты «умнеют» и зачастую могут распознавать ее (из собственного опыта: на форуме со стандартной капчей, который ставил для одной фирмы, в день было до 10 автоматических регистраций, соответственно, примерно столько же непотребных тем, после замены капчи на антибот типа «вопрос-ответ» боты больше не регистрировались)… кроме того, существуют даже ресурсы, которые нанимают кликеров, чтобы те работали на благо спамеров — вводили символы с капчи.

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

    Вот некоторые варианты, которые, на мой взгляд, с успехом могут конкурировать с традиционной капчей:

    1. посчитать результат сложения (или другого математического действия) двух случайных чисел;

    2. дать ответ на простой вопрос, типа «Название нашей планеты»;

    3. снять/установить галочку в чекбоксе;

    4. кликнуть по определенной картинке из ряда предложенных.

    Как связать reCaptcha с формой обратной связи

    Всем привет. Недавно помогал связать форму обратной связи, которая сделана с применением технологии ajax (то есть без перезагрузки страницы) с recaptca от Google и решил, что многим это тоже может быть интересно.

    Да, есть много плагинов для CMS, но вручную сделать это немного сложнее, а раз появился такой вопрос у одного, то может и кому-то из вас пригодится статья.

    Делать буду на примере свой же формы.

    Форма обратной связи с recaptcha от Google

    Итак, для тех, кто еще не понял, мы пытаемся добавить такую штуку в нашу форму:

    В первую очередь нужно получить API key для домена, на котором будет использоваться reСaptcha. Чтобы его получить, нужно перейти на эту страницу придумать названия и указать нужный домен:

    После этого, вас перебросят на страницу, где кратко будет описана интеграция на сайт, а также находиться ваш секретный ключ и ключ сайта:

    Дальше, нам говорят, что перед закрывающимся тегом нужно разместить следующий скрипт:

    А в форму, там, где будет располагаться каптча — следующий блок:

    Есть несколько дополнительных настроек, например:

    • светлый или темный внешний вид — data-theme=»light» или data-theme=»dark».
    • нормальный или компактный размер — data-size=»compact», data-size=»norml»

    Подробнее о том, какие еще есть настройки и как встроить рекаптчу в несколько форм на одной странице можно почитать тут.

    Так как в моей форме все скрипты располагаются в конце страницы, то я решил и скрипт от Google поместить там же. Выглядит это все так:

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

    Разметка формы сейчас выглядит так:

    Еще раз повторюсь, не обращайте внимание на форму, если не используете ту, о которой шла речь в одной из прошлых статей. Просто добавьте в нужное место своей формы div с ключом, который выдал Google.

    Теперь, если попытаться получить данные переданные методом POST, мы получим не только данные из полей (имя и телефон), а и значение переменной g-recaptcha-response. Его и нужно отправить Гуглу для прохождения верификации.

    Самостоятельно сделать это достаточно сложно, но есть готовый скрипт, который просто подключается к обработчику формы. Скачать его можно с Github на этой страничке:

    Теперь необходимо подключить его к обработчику (php файлу, который отправляет письмо) или вставить скрипт прямо в него. У меня это файл mail.php. Подключать в самом начале:

    В этом файле написан код, который передаст наш секретный ключ, значение g-recaptcha-response в Google, затем произойдет проверка успешна ли пройдена каптча. Но сначала, нужно добавить несколько переменных:

    Почти все готово, осталось добавить проверку в форму, чтобы показать пользователями, что они не заполнили каптчу. Я делаю такую:

    Полный код моего обработчика:

    Обратите внимание на почту и не забудьте поменять на свою. Кроме того, способ подключения файла recaptchalib.php предполагает, что что mail.php и recaptchalib.php находятся рядом, то есть в одной папке. Если будет «вываливаться» ошибка, убедитесь, что пути прописаны правильно или скопируйте код прямо в обработчик (в самый верх).

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

    Пример класса captcha на php (2)

    This is a simple CAPTCHA Class, written in PHP4.

    s: user defined captcha text

    More settings can be changed in the class .

    Just call the captcha.php file and pass the desired type and/or a predefined captcha text.

    Output: A 6 digits random number (letters are discarded)

    Output: A 6 digits random string (Lower/upper letters + numbers)

    0 : Lowercase Letters (a-z)

    1 : Uppercase Letters (A-Z)

    2 : Numbers Only (0-9)

    3 : Letters Only (upper and lower case)

    4 : Lowercase Letters and Numbers

    5 : Uppercase Letters and Numbers

    6 : All together

    Verification code (sample): See captcha.php file .

    This is a PHP4-like class, however it should work unchanged under PHP5. You can find more details in the code.

    Создание каптчи своими руками на PHP

    Мы все с вами привыкли видеть на сайтах при заполнении любой формы трудночитаемую картинку с рандомными символами и цифрами. Данная картинка называется КАПТЧА (от CAPTCHA— англ. Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей). Как описано в расшифровке аббревиатуры данная картинка позволяет определить робот или человек заполняет форму.

    В настоящее время существует множество разновидностей КАПТЧ, это может быть картинка с рандомным текстом, или картинка с математическими действиями, блок картинок в которых нужно выбрать определенные предметы и т.д. Все эти картинки направлены на борьбу с роботами спамерами, которые заполняют формы автоматически.

    Стоит понимать что КАПЧА это не панацея, и при желании ее всегда можно распознать автоматически использую соответствующие сервисы. Данная проблема актуальна для высоконагруженных веб сайтов с большой аудиторией, например социальные сети или популярные доски объявлений такие как Авито и т.д.

    Переходя от вступления к практики, для написания КАПТЧИ нам понадобится библиотека GD. GD Graphics Library (GD) — программная библиотека, написанная Томасом Баутелом (Thomas Boutell) и другими разработчиками для динамической работы с изображениями. Данная библиотека работает с множеством других языков программирования и служит для работы с графикой. Как вы уже догадались, мы будем с помощью библиотеки GD и PHP создавать свою картинку с рандомным текстом. Graphics Library позволяет также редактировать существующие изображения, а именно наложение логотипа на картинку, изменения размеров загружаемого изображения и многое другое.

    • gd_info — Вывод информации о текущей установленной GD библиотеке
    • getimagesize — Получение размера изображения
    • getimagesizefromstring — Получение размера изображения из строки данных
    • image_type_to_extension — Получение расширения файла для типа изображения
    • image_type_to_mime_type — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
    • image2wbmp — Выводит изображение в браузер или пишет в файл
    • imageaffine — Return an image containing the affine transformed src image, using an optional clipping area
    • imageaffinematrixconcat — Concatenate two affine transformation matrices
    • imageaffinematrixget — Get an affine transformation matrix
    • imagealphablending — Задание режима сопряжения цветов для изображения
    • imageantialias — Требуется ли применять функции сглаживания или нет
    • imagearc — Рисование дуги

    • imagechar — Рисование символа по горизонтали
    • imagecharup — Рисование символа вертикально
    • imagecolorallocate — Создание цвета для изображения
    • imagecolorallocatealpha — Создание цвета для изображения
    • imagecolorat — Получение индекса цвета пиксела
    • imagecolorclosest — Получение индекса цвета ближайшего к заданному
    • imagecolorclosestalpha — Получение индекса цвета ближайшего к заданному с учетом прозрачности
    • imagecolorclosesthwb — Получение индекса цвета, имеющего заданный тон, белизну и затемнение
    • imagecolordeallocate — Разрыв ассоциации переменной с цветом для заданного изображения
    • imagecolorexact — Получение индекса заданного цвета
    • imagecolorexactalpha — Получение индекса заданного цвета и альфа компонента
    • imagecolormatch — Делает цвета палитровой версии изображения более соответствующими truecolor версии
    • imagecolorresolve — Получает идентификатор конкретного цвета или его ближайший аналог
    • imagecolorresolvealpha — Получает идентификатор конкретного цвета и альфа компонента или его ближайший аналог
    • imagecolorset — Установка набора цветов для заданного индекса палитры
    • imagecolorsforindex — Получение цветов, соответствующих индексу
    • imagecolorstotal — Определение количества цветов в палитре изображения
    • imagecolortransparent — Определяет цвет как прозрачный
    • imageconvolution — Наложение искривляющей матрицы 3х3, используя коэффициент и смещение
    • imagecopy — Копирование части изображения
    • imagecopymerge — Копирует часть изображения с наложением
    • imagecopymergegray — Копирует часть изображения с наложением в градациях серого
    • imagecopyresampled — Копирование и изменение размера изображения с ресемплированием
    • imagecopyresized — Копирование и изменение размера части изображения
    • imagecreate — Создание нового палитрового изображения
    • imagecreatefromgd2 — Создание нового изображения на основе GD2 или URL
    • imagecreatefromgd2part — Создание нового изображения на основе части GD2 файла или URL
    • imagecreatefromgd — Создание нового изображения на основе GD файла или URL
    • imagecreatefromgif — Создает новое изображение из файла или URL
    • imagecreatefromjpeg — Создает новое изображение из файла или URL
    • imagecreatefrompng — Создает новое изображение из файла или URL
    • imagecreatefromstring — Создание нового изображения из потока представленного строкой
    • imagecreatefromwbmp — Создает новое изображение из файла или URL
    • imagecreatefromwebp — Создает новое изображение из файла или URL
    • imagecreatefromxbm — Создает новое изображение из файла или URL
    • imagecreatefromxpm — Создает новое изображение из файла или URL
    • imagecreatetruecolor — Создание нового полноцветного изображения
    • imagecrop — Crop an image using the given coordinates and size, x, y, width and height
    • imagecropauto — Crop an image automatically using one of the available modes
    • imagedashedline — Рисование пунктирной линии
    • imagedestroy — Уничтожение изображения
    • imageellipse — Рисование эллипса
    • imagefill — Заливка
    • imagefilledarc — Рисование и заливка дуги
    • imagefilledellipse — Рисование закрашенного эллипса
    • imagefilledpolygon — Рисование закрашенного многоугольника
    • imagefilledrectangle — Рисование закрашенного прямоугольника
    • imagefilltoborder — Заливка цветом
    • imagefilter — Применяет фильтр к изображению
    • imageflip — Flips an image using a given mode
    • imagefontheight — Получение высоты шрифта
    • imagefontwidth — Получение ширины шрифта
    • imageftbbox — Определение границ текста выводимого шрифтом freetype2
    • imagefttext — Нанесение текста на изображение, используя шрифты FreeType 2
    • imagegammacorrect — Применение гамма коррекции к GD изображению
    • imagegd2 — Вывод GD2 изображения в браузер или файл
    • imagegd — Вывод GD-изображения в браузер или в файл
    • imagegetclip — Get the clipping rectangle
    • imagegif — Выводит изображение в браузер или пишет в файл
    • imagegrabscreen — Захватывает изображение с экрана
    • imagegrabwindow — Захватывает изображение окна
    • imageinterlace — Включение или выключение интерлейсинга
    • imageistruecolor — Определяет, является ли изображение полноцветным
    • imagejpeg — Выводит изображение в браузер или пишет в файл
    • imagelayereffect — Установка флага альфа сопряжения для использования эффектов наложения изображений
    • imageline — Рисование линии
    • imageloadfont — Загрузка шрифта
    • imagepalettecopy — Копирование палитры из одного изображения в другое
    • imagepalettetotruecolor — Converts a palette based image to true color
    • imagepng — Вывод PNG изображения в браузер или файл
    • imagepolygon — Рисование многоугольника
    • imagepsbbox — Выдает параметры рамки, обрамляющей текст написанный шрифтом PostScript Type1
    • imagepsencodefont — Изменение вектора кодировки шрифта
    • imagepsextendfont — Растягивание или сжатие шрифта
    • imagepsfreefont — Освобождение памяти, занятой шрифтом PostScript Type
    • imagepsloadfont — Загрузка шрифта PostScript Type 1 из файла
    • imagepsslantfont — Наклон шрифта
    • imagepstext — Рисование текста поверх изображения, используя шрифты PostScript Type1
    • imagerectangle — Рисование прямоугольника
    • imagerotate — Поворот изображения с заданным углом
    • imagesavealpha — Установка флага сохранения всей информации альфа компонента (в противовес одноцветной прозрачности) и сохранение PNG изобаржения
    • imagescale — Scale an image using the given new width and height
    • imagesetbrush — Установка изображения (кисти), посредством которого будут рисоваться линии
    • imagesetclip — Set the clipping rectangle
    • imagesetinterpolation — Set the interpolation method
    • imagesetpixel — Рисование точки
    • imagesetstyle — Установка стиля рисования линий
    • imagesetthickness — Установка толщины линий
    • imagesettile — Установка изображения, которое будет использовано в качестве элемента мозаичной заливки
    • imagestring — Рисование строки текста горизонтально
    • imagestringup — Рисование строки текста вертикально
    • imagesx — Получение ширины изображения
    • imagesy — Получение высоты изображения
    • imagetruecolortopalette — Преобразование полноцветного изображения в палитровое
    • imagettfbbox — Получение параметров рамки обрамляющей текст написанный TrueType шрифтом
    • imagettftext — Рисование текста на изображении шрифтом TrueType
    • imagetypes — Возвращает список типов изображений, поддерживаемых PHP сборкой
    • imagewbmp — Выводит изображение в браузер или пишет в файл
    • imagewebp — Output a WebP image to browser or file
    • imagexbm — Вывод XBM изображения в браузер или файл
    • iptcembed — Встраивание двоичных IPTC данных в JPEG изображение
    • iptcparse — Разбор двоичных IPTC данных на отдельные тэги
    • jpeg2wbmp — Конвертирует изображение из формата JPEG в WBMP
    • png2wbmp — Преобразование PNG файла в WBMP
    Илон Маск рекомендует:  7 полезных советов для улучшения jquery кода

    Определим требования к нашей КАПТЧе для ее реализации:

    • Размер холста 200 х 60
    • Фон холста RGB(255, 181, 181)
    • Шрифт verdana.ttf
    • Рандомные лини на холсте с рандомным цветом
    • Генератор строки для КАПТЧИ
    • Рандомный цвет символов и углом наклона
    • Рандомное количество и цвет точек на холсте
    • Обновление КАПТЧИ без перезагрузки страницы (Jquery)
    • КАПТЧА чувствительна к регистру
    • Плашка с URL нашего сайта

    Приступаем к написанию КАПТЧИ. Первое что нам нужно – это генератор случайных чисел. Такой генератор я писал в одной из статей Генератор пароля + соль в пароле для хранения в MySQL. Так же необходимо загрузить файл шрифта на сервер для использования его в КАПТЧе.

    Если обратиться к этому файлу через браузер, то мы получим вот такую картинку.

    Пример класса captcha на php (2)

    В процессе подготовки форума, самым очевидным образом возник вопрос о создании формы регистрации. А по сложившейся традиции, в такой форме всегда имеется каптча — картинка с набором символов, которые предлагается ввести в текстовое поле ввода.

    Примечание
    Само понятие каптчи появилось от CAPTCHA, что является аббревиатурой Completely Automated Public Turing test to tell Computers and Humans Apart. В переводе с английского — «полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей», или ПАПТРКЛ. Однако русский перевод аббревиатуры труднопроизносим, и потому используется калька с английского, причем иногда буква Т ради благозвучия пропадает и получается просто «капча».

    Сам генератор каптчи, к слову, уже имелся в распоряжении — класс TCaptcha был реализован еще в версии 1.5 PHP-библиотеки GSCP. Теперь осталось сделать 2 вещи: использовать имеющийся генератор картинки-каптчи и сделать так, чтобы её можно было проверить.

    Создание CAPTCHA при помощи PHP

    Первым делом нам потребуется GSCP версии 1.5 или выше (используем только что вышедший релиз-кандидат 1.6). Скачиваем архив со скриптами и подключаем к своему скрипту, который назовем captcha_image.php нужный PHP-файл — captcha.php:

    Собственно, 99% работы по части генерации картинки для капчи сделано, осталось лишь создать экземпляр класса и настроить параметры гнерации изображения. В таблице ниже приведены основные свойства класса Tcaptcha.

    Свойство Тип данных Описание
    $ctext Строка Текст для каптчи. Используется для записи, если вы желаете использовать собственные варианты, а не автоматически генерированные последовательности символов, и для чтения — после работы генератора (метод GenerateText())
    $symbols Массив Массив символов, из которых генерируется строка для каптчи. По умолчаннию указаны все цифры и буквы латиницы, кроме нуля и букв «I» и «О» — во избежание путаницы
    $minlength Целое число >0 Минимальное число символов в каптче. По умолчанию 5.
    $maxlength Целое число >0 Максимальное число символов в каптче. По умолчанию 7.
    $bgcolor Цвет в 16-ричном формате Цвет фоновой заливки для каптчи (если не используется фоновый рисунок). По умолчанию 0xffffff.
    $fontcolor Цвет в 16-ричном формате Цвет шрифта. По умолчанию 0xffffff.
    $fontsize Целое число >0 Размер шрифта. По умолчанию 2 (средний системный), если указан шрифт (см. fontname), то следует указать размер от 9-10 и выше.
    $fontname Строка Имя файла со шрифтом TTF. По умолчанию не определен, используется встроенный GD-шрифт.
    $waves Целое число от 0 до 3 Волновые искажения текста в каптче: 0 — нет, 1 — по горизонтали, 2 — по вертикали, 3 – по обеим осям. По умолчанию 1.
    $lines Целое число от 0 до 3 Штрихи. 0 — нет, 1 — цветом фона, 2 — цветом текста, 3 — оба. По умолчанию 0.
    $angle Целое число Поворот в градусах. Типично используйте не более +/- 2-3 градуса для прямоугольной каптчи. По умолчанию 0.
    $width, $height Целое число >0 Ширина и высота рисунка, соответственно. В пикселях. По умолчанию 130 на 50.

    Собственно, достаточно написать 3 маленьких строчки кода:

    $c = new Tcaptcha(); $c->GenerateText(); $c->Make();

    И этого будет достаточно, чтобы получить изображение-капчу размерами 50 на 130 пикселей, состоящую из 5-7 символов и умеренно устойчивую к взлому. Впрочем, можно несколько усложнить (или наоборот, упростить) каптчу, изменить её размеры, фон, цвет и гарнитуру шрифта. Правда, в последнем случае понадобится установленная на стороне хостера поддержка ImageMagick со всеми вытекающими (поддержка TTF-шрифтов и т.д.). Если все это имеется, то можно использовать для своей каптчи, скажем, шрифт Arial с полужирным начертанием. В таком случае можно установить еще и размер шрифта, да и с другими свойствами поэкспериментировать. Для этого между созданием экземпляра класса ($c = new Tcaptcha();) и вызовом метода генерации текста ($c->GenerateText();) можно вставить следующие строки:

    $c->fontname = «../arialbd.ttf»; // устанавливаем шрифт $c->fontsize = 18; //устанавливаем размер шрифта $c->fontcolor = 0xa0040f; //устанавливаем цвет шрифт $c->bgcolor = 0xfeecca; //устанавливаем фоновый цвет каптчи $c->angle = -2; // устанавливаем угол поворота текста $c->waves = 1; // волновые искажения пусть останутся по горизонтали $c->lines = 2; // заштрихуем цветом текста $c->minlength = 6; // в этой и следующей строках устанавливаем фиксированное число символов в каптче — 6 $c->maxlength = 6;

    Весь этот код следует поместить в какой-либо файл, который и будет картинкой (не забудьте про «include(«captcha.php»);» в самом начале, да и про расположение файлов библиотеки и шрифта — тоже). Назовем свой скрипт captcha_image.php. Вы можете запустить го из адресной строки браузера, например:

    И вы увидите свою капчу.

    Использование каптчи для проверки форм

    Сама по себе каптча, в общем-то не нужна. Ведь суть CAPTCHA – отличать ботов от реальных посетителей. Так что давайте рассмотрим использование на примере, скажем, формы авторизации — чтоб не пытались «в лоб» брутфорсить пароли. Для этих целей в GSCP имеется стандартные формы авторизации и даже скрипты для проверки. Мы не будем их тут подробно рассматривать, но суть в том, что в версии 1.6 как раз добавлена поддержка каптчи на стандартной форме ввода логина-пароля, и для создания нужной формы достаточно подключить скрипт stdforms.php и написать:

    $frm = new TStdLoginForm(NULL, «authfrm», «check.php», 11, «Введите логин, пароль и символы с картинки: «);

    Суть сего сводится к генерации следующего HTML-кода:

    Т.е. создается форма с именем authform, методом отправки POST, которую будет обрабатывать скрипт check.php. В самой форме есть поля для ввода логина, пароля, и символов с каптчи, а так же кнопка отправки.

    Создав тем или иным способом форму, содержащую поле для ввода символов с каптчи (а так же не забыв вывести само изображение), останется решить только одну проблему: как проверить соответствие изображения на картинке и ответа пользователя? На самом деле, способов великое множество. Главное не ошибиться. Самое первое место по глупости занимает прямая отправка сгенерированного текста в форму (скажем, в виде скрытого input). Не намного лучше и способ, который упорно предлагается на десятках блогов в рунете, упорно вылезающих в первых строках поиска по запросу CAPTCHA: передача через сессию. Вроде как не видно, и ладно. На самом деле — видно, боты прекрасно могут получить значение из cookie, сессий и т.п. Поэтому если уж и использовать хранение в сессии, то не самого ответа, а его хэша.

    Илон Маск рекомендует:  Что такое код unlockresource

    В результате в самом начале скрипта captcha_image.php следует начинать сессию (session_start();), а непосредственно перед выводом самой картинки — сохранять в сессии MD5-слепок текста с каптчи. В итоге получаем окончательный вариант своего скрипта — вот его полный исходный код.

    Файл captcha_image.php fontname = «../arialbd.ttf»; // устанавливаем шрифт $c->fontsize = 18; //устанавливаем размер шрифта $c->fontcolor = 0xa0040f; //устанавливаем цвет шрифт $c->bgcolor = 0xfeecca; //устанавливаем фоновый цвет каптчи $c->angle = -2; // устанавливаем угол поворота текста $c->waves = 1; // волновые искажения пусть останутся по горизонтали $c->lines = 2; // заштрихуем цветом текста $c->minlength = 6; // в этой и следующей строках устанавливаем фиксированное число символов в каптче — 6 $c->maxlength = 6; $c->GenerateText(); $_SESSION[«captcha»]=MD5($c->ctext); $c->Make(); ?>

    Здесь мы создали рисунок и сохранили в сессии хэш правильного ответа. Теперь достаточно получить значение поля captcha из формы, сделать с него MD5 слепок и сравнить их. В нашем примере обработкой формы занимается скрипт check.php. Для простоты мы опустим проверку логина-пароля (тем более, что по-хорошему это надо делать уже после проверки каптчи). Получаем примерно следующее:

    В условном операторе дополнительно проверяется, не пустые ли строки сравниваются. В принципе, это все. Единственное, что следует учитывать — так это то, что к 3-4 символьной сроке, состоящей лишь из букв и цифр (в нашем случае даже не всех), MD5-хэш можно подобрать за приемлемое время даже на PHP. Поэтому используйте не менее 6 символов, либо вообще передавайте лишь идентификатор сессии, а ответ храните у себя на сервере в базе данных. Это чуть сложнее и чуть накладнее, но зато надежнее.

    Форма обратной связи с капчей на PHP

    2020-12-19 / Вр:23:25 / просмотров: 12513

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

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

    Форма обратной связи не отправится, пока не будет правильно введена капча (цифры на картинке).
    Для реализации капчи вам нужно будет подготовить 10 изображений с цифрами 0-9 (либо скачайте их тут).

    Код капчи (captcha)
    Создайте файл с названием « captcha.php » и вставьте в него вот такой код:

    Для генерации случайных чисел здесь используется php функция « mt_rand() ».
    Генерирует в диапазоне от 0 до 9.
    После того, как сгенерировалось число, оно записывается в массив « $num() ». Потом выводится соответствующее изображение и так 5 раз, благодаря циклу «while». Вот так и получаем на экран 5 цифр.
    Все эти 5 цифр записываются в переменную « $captcha ».
    Переменная « $captcha » будет передаваться обработчику формы для проверки на соответствие цифр, что были введены в поле.

    Обработчик формы и капчи (проверка и отправка данных)
    Создайте файл « form-handler.php » и вставьте вот такой код:

    В этом коде все, что касается обработки данных, проверки полей, ввода капчи и отправки самого письма.
    В коде есть комментарий, где какая часть за что отвечает.
    Вам только нужно поменять на свое усмотрение содержание письма и заменить обязательно мой email ( test@test ) на собственный ( строка №21 ):

    Теперь сама форма.

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

    Внимание: файлы « form-handler.php » и « captcha.php » должны находиться в одной папке с формой или же, если так не получается, не забываем менять путь к обработчику « form-handler.php »

    код на странице form-handler.php:

    Здравствуйте, Александр!
    Вы не полностью сделали как на примере. У меня нет поля “Тема сообщения”.
    По началу я думал, что вы не прописали переменную в обработчике. Но все вижу, что сделано корректно и правильно.
    Проверил Ваш код у себя, у меня отправка письма идет. Очень странно.
    Тут я вижу без бубна не обойтись. Я мог бы глянуть у вас на сайте, но мне нужны будут доступы и время.

    Степан, здравствуйте!
    Я разобрался, функция отправки почты php mail ( ) была отключена, поэтому не работала форма обратной связи.

    Установка ReCaptcha v2.0 на любой сайт

    Доброго времени суток, друзья! В этой статье я постараюсь подробно рассказать о процессе установки и настройки самой лучшей капчи от Google. Почему самой лучшей? Потому что к черту ввод циферок с картинок и прочие ужасы, спасибо большое нашему «старшему брату» за новую технологию. Клик, и ты не робот.

    Речь пойдет о второй, улучшенной версии ReCaptcha. После обновления значительно упростился процесс проверки на стороне сервера, больше не нужно подключать целую библиотеку, разбираться в ней и прочее. Единственная сложность в том, что мне показалась недостаточной инструкция с официального сайта, поэтому пришлось немного поколдовать. Но в итоге я понял принцип установки и готов им поделиться.

    Получение API ключей от Google

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

    Придумываем название и добавляем сайты, без «http://», только домены. Зеркала с «www.» добавлять не нужно, он найдет их сам.

    Google выдает нам ключ и секретный ключ, который на то и секретный, чтобы его никому не сообщали. С этими ключами переходим к установке капчи на сайт.

    Установка рекапчи на стороне клиента

    Другими словами, вставляем саму капчу в форму на сайте. Google делится вполне ясной и понятной инструкцией по этому поводу. В HTML коде используется ваш ключ(не секретный).

    Используем Google reCaptcha вместе с PHP и JavaScript

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

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

    Нет ничего сложного в том, чтобы поставить Google reCaptcha на свой сайт. Первым делом идем на сайт:

    Нажимаем Get reCaptcha и регистрируем свой сайт.

    После регистрации своего сайта. Вы получите два ключа — секретный ключ (Google Secret Key) и публичный ключ (Google Site Key). Секретный ключ будет отправляться на сервер Google вместе с GET запросом, для проверки каптчи, а публичный ключ устанавливается непосредственно на ваш сайт.

    Устанавливаем HTML Google reCaptcha на сайт.

    Установка HTML кода Google reCaptcha на сайт происходит в два этапа. Первый этап заключается в подключении необходимых JavaScript библиотек:

    Затем непосредственно в форму, которую необходимо проверять вы вставляете DIV блок следующего содержания:

    Проверка Google reCaptcha средствами PHP

    Несмотря на то, что у вас уже появилась каптча на странице, она не проходит валидацию на сервере и любой человек может «пройти» вашу каптчу. Давайте исправим это.

    Google reCaptcha проверяется на сервере, путем отправки GET запроса на сервер Google с приватным ключом, IP адресом и значением поля g-recaptcha-response из $_POST.

    Вот листинг файла post.php, который отправляет запрос на сервер Google для проверки валидации каптчи:

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

    Как обновить Google reCaptcha средствами JavaScript.

    Иногда требуется обновить reCaptcha программно, например если вы отправляете данные на сервер средствами AJAX. Сделать это несложно, достаточно в обработчике прописать следующую строчку:

    И при определенном событии, например, при нажатии на кнопку, reCaptcha обновится. Пример обновления Google reCaptcha при нажатии на кнопку:

    Как разместить несколько кодов Google reCaptcha на одной странице.

    Очень часто требуется, чтобы на одной странице было несколько Google reCaptcha. Сделать это стандартным способом невозможно, так как в этом случае всегда будет установлена только одна каптча, а остальные будут скрыты. Такое поведение можно с легкостью переопределить, если подписаться на событие onload возникающее во время загрузки JavaScript файла каптчи:

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

    Теперь, при загрузке страницы у нас будет вызываться каждый раз функция onLoadHandler, в который мы инициализируем одновременно две Google reCaptcha на своей странице и при этом две каптчи одинаково хорошо работают. Вот полный HTML код вызова несколько reCaptcha на одной странице:

    Добавление нескольких Google reCaptcha с помощью jQuery по клику мыши.

    Часто требуется добавить несколько Google reCaptcha с помощью JavaScript или jQuery при каком-то событии, например, по клику мыши. Сделать это очень просто, зная основной принцип Google reCaptcha: должен быть элемент с уникальным ID и он должен быть в DOM дереве. Дальше осталось написать готовый код:

    Суть кода в том, что мы по какому-то действию должны в $container вставить DIV с уникальным ID, а потом в этот DIV отрендерить нашу каптчу. Все очень просто.

    Конечно же, это пример синтетический, но когда вы будете делать свой проект с Google reCaptcha, скороее всего у вас будет несколько модальных окон или форм и на каждой нужно будет показать свою каптчу.

    Полный листинг файла находится в GitHub репозитории, ссылку на который вы найдете в конце этой статьи.

    Invalid domain for site key

    Последнее, о чем хотелось бы рассказать — об ошибке Invalid domain for site key. Ошибка возникает в том случае, если ваш публичный ключ находится не на том домене, который вы указывали в настройках reCaptcha. Думаю, тут все понятно.

    Полный листинг и готовый рабочий пример можно скачать с нашего GitHub репозитория по адресу:

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL