Капча на сайт php
Создание простой капчи на PHP
Статья, в которой разберём как написать простую Captcha на PHP. При этом рассмотрим как вариант с использованием сессии, так и куки.
Что такое Captcha?
Captcha (капча) – это некий тест, который человек решает очень легко, а робот – нет (научить компьютер решать его крайне сложно и затруднительно).
Используется Captcha на сайте для защиты от спама и повышенной нагрузки, которые создают роботы. Капчу можно очень часто встретить в формах регистрации, входа, отправки сообщений, при скачивании файлов и многих других местах.
В большинстве случаев капча отображается как некоторый искаженный или наложенный на фон текст, который посетителю сайта необходимо разобрать и ввести его в некоторое поле. Кроме текста на фоне используется и другие алгоритмы: найти среди множества картинок правильные, собрать пазл, переместить слайдер, нарисовать связь между несколькими картинками и т.д.
Исходные коды капчи
Исходные коды капчи расположены на GitHub: itchief/captcha.
Скриншот формы с капчей:
Процесс разработки капчи представлен в виде следующих этапов:
Верстка формы
Разработку Captcha начнём с создания формы. Для простоты форма будет состоять из капчи и кнопки отправить:
Генерация кода капчи и изображения
Формирование кода капчи и изображения выполним в файле «captcha.php», который поместим в папку «/assets/php»:
Если используете протокол HTTPS, то установите шестому аргументу значение true:
Для отправки капчи клиенту создается изображение, имеющее фон «bg.png», на котором с помощью функции imagefttext() пишется текст капчи.
Скрипт для обновления капчи на форме
Написание обработчика формы
Для обработки формы создадим файл «process-form.php» в папке «/assets/php/»
В этом файле будем сравнивать текст капчи, который пользователь ввел в форме с тем, который у нас хранится в сессии или куки.
В качестве результата будем возвращать JSON. В случае успеха:
По умолчанию этот файл сравнивает капчу со значением, находящимся в сессии. Если в «captcha.php» сохраняете капчу в куки, то здесь необходимо закомментировать секцию 1a и раскомментировать 1b:
Если используете протокол HTTPS, то замените шестой аргумент на значение true :
JavaScript для отправки формы на сервер через AJAX
Код для отправки формы на сервер через AJAX и обработки полученного результата:
Для отправки и получения cookie посредством fetch() установим:
Простейшая капча на PHP и GD
В этой статье, мы займемся внедрением капчи (случайно генерируемых изображений для проверки на то, кем является посетитель: человеком или роботом). Капча это необходимое зло, и в данной статье я научу вас как её можно сделать.
Мы не будем объяснять, что такое капча, так как предполагается, что это основы и вы с ними уже знакомы из других источников.
Рисование капчи
Для начала, вам нужно убедиться, что у вас установлена библиотека GD (Graphics Draw). Она позволяет отрисовывать графику и изображения с помощью встроенных PHP-функций.
Капча обычно состоит из трех основных компонентов – фигура, искажение и текст.
Мы будем следовать следующим шагам для достижения цели статьи:
В приведенном коде используется процедурный стиль, чтобы сохранить простоту и читаемость примера. В реальной же реализации стоит использовать ООП-стиль.
Отображение пустого изображения
Изображение будет сформировано с помощью HTML-тега « img », ссылающегося на внешний файл.
Для этого будет использовано две функции – одна для создания, а вторая для отображения изображения:
Первая строка запускает пользовательскую сессию на данной странице.
После выполнения первого шага, наш код будет генерировать только черный прямоугольник:
Создание фигуры
Она принимает пять аргументов: ссылка на изображение, начальную позицию по оси Х, начальную позицию по оси Y, конечную позицию по оси Х, конечную позицию по оси Y и фоновый цвет. Вы можете использовать соответствующую функцию эллипса для генерации эллиптической капчи.
Функция imagecolorallocate() назначает цвет принимаемой переменной в формате RGB, передаваемый как аргумент. Следующий код добавляется к функции create() :
Предыдущая картинка после данного шага станет белой:
Генерация случайных линий
Координаты будут генерироваться автоматически. Таким образом, будет создана одна случайная линия.
Мы будем генерировать несколько линий путем помещения функции отрисовки линии в цикл:
Функция imageline() получает координаты x1,x2,y1,y2 и цвет линии в качестве аргументов, а также ссылку на изображение. Цвет линии выставлен равным цвету линии, заданному на предыдущем шаге.
Получится тот же самый результат:
Генерация случайных точек
Y-координата генерируется на стадии отрисовки линий:
Генерация случайного текста
Цикл выглядит следующим образом:
Мы разъясним значение строк:
Функция imagestring() выводит текст на наше изображение. Она принимает 6 аргументов:
Если же данное значение будет больше 40 пикселей, то буквы не поместятся внутри изображения.
В итоге, мы получили 6-буквенную капчу. Всегда можно усилить алгоритм, добавив новые случайные величины, которые сделают защиту более надежной.
Теперь, наша капча выглядит вот так:
Текст внутри капчи будет меняться каждый раз при обновлении страницы.
Валидация
На данном этапе принимается ответ пользователя и после его обработки, посылается ответ. Для начала, нужно сделать простую форму с полем ввода и кнопкой отправки.
Есть множество способов обработки капчи в зависимости от требований того или иного веб-приложения. Для целей нашей статьи, мы произведем обработку на этой же странице.
Вот тут пришло время пояснить две строки, оставленные без комментариев выше:
Мы используем две кнопки отправки: одна отправляет строку, а другая – обновляет страницу.
Следующие строки нужно добавить между двумя закрывающими тегами div (смотрите комментарии к коду функции display() выше):
Перед тем, как двигаться дальше, мы должны знать, когда нужно, а когда не нужно отображать поле ввода. Оно будет отображаться, только когда:
Для этого, заменим следующие строки из первого шага:
Функции create_image() и display() вызываются, только если выполнены два условия, описанные выше.
Нам понадобится переменная сессии с предыдущей страницы, так что тут сессия еще не закрывается. Уничтожается она автоматически при закрытии окна браузера.
Капча теперь выглядит так:
Если значение, введенное в поле неверно, то пользователь будет уведомлен об этом и капча появится еще раз:
Если все верно, то пользователь получит соответствующее сообщение:
Тут есть один нюанс – когда пользователь наживает кнопку « Назад » в браузере, изображение возьмется из кэша браузера, а страница перезагрузится.
Решение тут очень простое – нужно создавать уникальные имена изображений каждый раз, чтобы браузер не смог найти их в кэше.
Добавьте следующую строку ниже начала сессии:
Заменяем атрибут src тега img в функции display() :
Также изменяем место, где создается png-изображение в функции create_image() :
Добавьте следующие строки прямо перед вызовом функции imagepng() :
В реальном приложении, нужно убедиться, чтобы изображения капчи хранились в отдельной папке, иначе можно случайно удалить другие важные изображения.
Заключение
Создавать различные капчи на PHP очень просто. В этой статье были рассмотрены три базовых компонента стандартной капчи – фигура, искажение и текст.
Мы надеемся, что статья была для вас полезной и интересной!
Капча для сайта на php с обновлением
апчу применяют для защиты от вездесущих роботов, которые спамят сайты в автоматическом режиме.
Прежде всего, относится это к интернет-сайтам на готовых движках. Увы, их не спасают даже капчи (если в интернет попало описание “дыры” в движке). Правда если ваш ресурс уже довольно популярен, то точно найдутся люди, которые пожелают пропиариться за ваш счет. Они напишут скрипт именно под ваш движок и обязательно заспамят ваш сайт все равно.
Для защиты от всего этого следует ставить капчи. Но капчи не всегда генерируются хорошо, поэтому даже человек не может ее расшифровать. Из-за этого, рекомендуется делать специальную капчу с обновлением.
То есть если пользователь ее расшифровать не может, он жмет кнопку “Обновить”, проверочный код становится иным. Реализацию именно этого мы и разберем сейчас.
Для начала разберем код генерации капчи.
Мы имеем шрифт по следующему пути: “fonts/verdana.ttf”. Далее создадим специальный файл captcha.php с определенным кодом.
По сути, этот скрипт включает в себя три этапа:
Все эти три пункта по-разному могут быть реализованы в разных капчах, но, все три этапа всегда присутствуют. Можно взять какой-то готовый код с генерацией довольно сложной, но в то же время вполне читабельной капчи.
Далее следует заняться выводом капчи.
При нажатии на кнопку “Обновить” у тега img с капчей изменяется атрибут src. Src каждый раз разный. Это на саму капчу никакого влияния не оказывает (если мы этого не захотим, разумеется), но, для браузера это новое изображение, поэтому он его подгружает заново. В captcha.php создается абсолютно новый код, он записывается в сессию заново, заново рисуется картинка и возвращается после в тег img.
Вот так и делается полноценная капча с обновлением. Надеемся, что эта статья вам обязательно поможет.
Капча на PHP
Здравствуйте, уважаемые читатели блога LifeExample, сегодня я хочу выделить немного времени для ознакомления с нужным элементом для защиты сайта. Созданная, нами капча на PHP поможет вам защитить свой сайт от спама.
Перед тем как начать разработку капчи на PHP, давайте расставим все точки над i, и разберемся, откуда взялось это не понятное название и что оно означает.
Что такое капча
Сегодня задав, любому вебмастеру, вопрос: “Что такое капча?”. Мы наверняка услышим: “Капча — это средство защиты от спам роботов”. И в принципе это правильно, но давайте окунемся в историю, для того чтобы узнать более точный ответ на этот вопрос.
В начале 2000-х годов термин “КАПЧА”, стал все чаще появляться на просторах всемирной паутины. Происхождение этого термина заслуга английского математика Алана Тюринга, который предложил в 1950 году эмпирический тест с целью определить сможет ли мыслить компьютер.
В те времена и по сей день, ученые и программисты многих университетов так и не создали искусственного интеллекта, эквивалентного человеческому разуму. Несмотря на это, труды Тюринга нашели отличное применение в полностью автоматизированном публичном тесте Тьюринга для различия компьютеров и людей (Completely Automated Public Turing test to tell Computers and Humans Apart ) сокращенно CAPCHA.
Теперь нам стало ясно, что слово КАПЧА – это лишь транскрипция аббревиатуры CAPCHA, скрывающей за собой длинную расшифровку.
Таким образом, отвечая на вопрос: “Что такое капча?”, можно смело утверждать, что это тест для различия компьютеров и людей. А так как с помощью КАПЧИ мы можем точно определить, кто отправил ответ, человек или машина, то запросто применим это в своих целях.
Ну вот, я кажется удовлетворил свои писательские потребности, и могу приступить к созданию капчи на PHP.
Как сделать капчу
Если попросить яндекес или гугл, выдать нам ответ на данный вопрос, то можно встретить массу предлогаемых решений. Начав разбираться с алгоритмами работы, я прочитал много советов и примеров реализации капчи на PHP. Что позволило мне сделать определенные выводы, и реализовать скрипт таким образом чтобы он отвечал моим требованиям.
Мне необходимо было создать скрипт “Капча на PHP” требующий минимум усилий и отвечающий смыслу сей защиты.
Для создания примитивной, но отвечающей всем канонам защиты, нам потребуется иметь пять файлов:
Давайте по порядку, первое что мы хотим сделать это вывести картинку, для этого в файле index.php Пишем такие строки:
Тут стоит обратить внимание на указанный в атрибуте src, не характерный для него файл с расширением php. Все дело в том что файл captcha.php хоть и является скриптом, но возвращает ответ в виде изображения в формате png вполне подходящий для тега
img.
Взглянем на код скрипта генерирующиего картинку:
$letters = ‘ABCDEFGKIJKLMNOPQRSTUVWXYZ’ ; // алфавит
header ( ‘Content-type: image/png’ ) ; //тип возвращаемого содержимого (картинка в формате PNG)
Сама проверка как видите, тривиальна, но в реальности вместо этих сообщений, можно вставить необходимые алгоритмы, например для сохранения комментария, переданного вместе с проверочным текстом.
В результате у меня получился легковесный, и легко встраиваемый скрипт капчи на PHP
Читайте также похожие статьи:
![]()
![]()
![]()
Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.
Капча на PHP
Капчу на PHP, или проверочный код, позволяющий отличить человека от робота, каждый из Вас вводил многократно: при регистрации, при отправлении сообщения, при поиске на сайте и много, где ещё. И в этой статье мы с Вами разберём скрипт, реализующий капчу на PHP, а также я Вам покажу, как использовать данный скрипт.
Сначала скачайте скрипт капчи на PHP. Извлекайте архив и помещайте его на Ваш сайт.
Теперь о том, как добавить капчу на форму, например, на форму регистрации:
В результате, на форме регистрации Вы увидите проверочный код, который пользователь должен будет ввести. Теперь о том, как проверить правильность ввода. Для этого в файле “register.php” (или в другом файле, который указан в атрибуте “action“) пишем следующие строки:
То есть считываем то, что ввёл пользователь ($_POST[‘kapcha’]) и сравниваем с тем, что находится в сессии (данное значение было записано при генерации капчи). Если значения не совпадают, то делаем вывод, что капча введена неправильно, иначе делаем вывод, что капча введена верно. То есть дальше Вы можете, основываясь на результат сравнения выполнить определённые действия. Например, зарегистрировать пользователя или отправить его вновь на форму регистрации, хотя, безусловно, это зависит от Вашей задачи.
Если Вы хотите научиться самостоятельно создавать подобные скрипты, то посмотрите мой Видеокурс “PHP и MySQL с Нуля до Гуру“: http://srs.myrusakov.ru/php
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 61 ):
Эта капча очень слабая и можно легко написать скрипт который будет распозновать его. Михаил, советую поменять капчу при регистрации.
Капча является формальной, однако, какой смысл автоматической регистрации на моём сайте? У меня свой движок, своя система, поэтому никто не будет возиться с ним. Это никому не нужно, потому и капча чисто формальная, которая сделана максимально простой для обычных людей.
А зачем тогда капча вообще нужна?
Для защиты от авторегистраций. А вдруг кому-нибудь понадобится? Это Вам кажется, что капча очень лёгкая, уверяю, что разработать подобный алгоритм распознавания очень тяжело, поэтому человек передумает заниматься авторегистрацией на моём сайте.
Я немного усовершенствовал рисунок (сделал его меньше по высоте на 10 пикселей) и теперь нижние хвосты немного обрезаны. Такие, как “j” сканер определяет как “i”, а “y” как “v”, “p” как “o” или “D” ну и так далее. Просто нижняя часть скрыта настолько, что человек поймет, какая это буква, а fine reader нет 🙂
А я вобщем просто не заморачивался и скачал другой шрифт с корявыми буквами, в коде заменил verdana.tff на название моего шрифта и всё =)

















