Создание капчи (captcha) на PHP. Что такое капча? Как ввести или убрать капчу

Captcha PHP представляет собой программу, используемую для проверки того, что человек, а не компьютер, вводит данные. Капчи обычно отображаются в конце онлайн-форм и просят пользователя ввести текст с искаженным изображением. Текст на изображении может маскироваться искаженным шрифтом, волновыми и зигзагообразными линиями и автоматическая программа распознавания не может его выявить. Некоторые Captcha PHP включают в себя функцию аудиального произношения. Тесты Captcha могут остановить 90% хакерских атак, заблокировав программное обеспечение робота и ограничив отправку онлайн-запросов.

Определение

Captcha PHP — это система реагирования на вызовы, предназначенная для дифференциации людей и роботизированных программ. Капча используется в качестве проверок безопасности для предотвращения спамеров и хакеров от использования форм на веб-страницах для вставки вредоносного кода.

Спецификация

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

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

История

Потребность в Captcha PHP родилась еще в 1997 году. В то время поисковая система AltaVista искала способ блокировать автоматическое размещение URL-адресов на платформе, которая искажала алгоритмы ранжирования поисковой системы. Чтобы решить эту проблему, Андрей Бродер, главный ученый AltaVista, разработал алгоритм, который случайно генерировал изображение печатного текста. Хотя компьютеры не могли распознать изображение, люди могли читать сообщение, содержащее изображение и отвечающее соответствующим образом. Бродер и его команда получили патент на эту технологию в апреле 2001 года.

В 2003 году Николас Хоппер, Мануэль Блум, Луис фон Ан из Университета Карнеги-Меллона и Джон Лэнгфорд из IBM разработали алгоритм и придумали термин Captcha. Имя означает абсолютно автоматизированный тест Тьюринга публичного применения для дифференциации людей машин.

PHP

PHP — это язык сценариев и интерпретатор, который находится в свободном доступе и используется в основном на веб-серверах Linux. PHP выполняется на сервере, а на клиенте запускается сопоставимая альтернатива JavaScript. Данный язык программирования является альтернативой технологии Microsoft Active Server Page (ASP). Как и в ASP, PHP-скрипт Captcha встраивается в веб-страницу вместе с HTML-кодом. Перед отправкой страницы пользователю веб-сервер вызывает PHP для интерпретации и выполнения операций, вызванных в скрипте.

HTML-странице, содержащей PHP-скрипт, обычно присваивается суффикс имени файла.php - «.php7» или «.phtml». PHP можно рассматривать как «динамические HTML-страницы», поскольку контент будет зависеть от результатов интерпретации сценария.

Язык бесплатный и используется по лицензии с открытым исходным кодом.

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

Как работает Captcha на PHP

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

Классификация

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

Распознавание изображений Captcha в PHP, которые также широко используются, просят пользователей идентифицировать подмножество картинок в большом наборе изображений. Например, пользователю может быть представлен набор иконок, и предлагается нажать на все те, в которых есть автомобили.

Другие типы Captcha включают:

  • Math Captcha — требует от пользователя решения основной математической задачи, такой как добавление или вычитание двух чисел.
  • 3D Super Captcha — здесь пользователь должен идентифицировать изображение, отображаемое в 3D.
  • I"m Not a Robot — в этом типе капчи пользователь должен установить флажок.
  • Marketing — требует от пользователя ввода определенного слова или фразы, относящейся к бренду спонсора.
Обход капчи: обзор последних расширений

Пользователи могут использовать расширения из надстроек браузера, которые позволяют пользователям обходить ввод капчи. Популярные надстройки браузера включают AntiCapture, Captcha Be Gone и Rumola.

Автоматический плагин AntiCaptcha для Chrome и Firefox автоматически находит plugins captcha recaptcha recaptcha php на веб-странице и обрабатывает ее для пользователя. Приложение не бесплатное: на момент написания этой статьи стоимость услуги начинается с 0,70 доллара за 1000 изображений Captcha. Расширение Captcha Be Gone обнаруживает капчу на веб-страницах, обрабатывает ее и копирует результат в буфер обмена пользователя. На данный момент утилита доступна для браузеров Firefox, Chrome и Internet Explorer за подписку в размере 3,50 долларов США в месяц.

Приложение Rumola для Firefox, Chrome и Safari автоматически ищет Captcha на веб-страницах, которые посещает пользователь. В настоящее время стоимость составляет 0,95 $ для 50 изображений капчи или 1,95 $ для 150 решений. У данного разработчика также есть букмарклет JavaScript, который можно использовать для устройств, подключающихся к Интернету.

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

Как открыть Captcha PHP: пример

Представленный ниже код показывает, как создать простую графику Captcha со случайными строками и цифрами и как включить ее в HTML-форму для предотвращения автоматической подачи вредоносных скриптов. Также это поможет ответить на вопрос: как открыть plugins captcha recaptcha recaptcha php?

Следующий код необходимо сохранить как отдельный файл PHP (мы называем его Captcha /php). Этот файл создает PNG-изображение, содержащее серию из пяти цифр. Он также сохраняет эти цифры в переменной сеанса, чтобы другие скрипты могли знать, что такое правильный код, и проверить правильность ввода.

Пример Captcha PHP script

//google Captcha PHP PHP image Captcha

// Adapted for The Art of Web: www.the-art-of-web.com

// Please acknowledge use of this code by including this header.

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

Полученное в результате обработки скрипта (Captcha PHP ajax) изображение должно быть трудным для «роботов», но максимально простым для людей. При желании вы можете усложнить графику, добавив цвета или текстуры, либо используя разные шрифты и эффект вращения.

Альтернативные схемы

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

  • Компания Chew опубликовала свою работу на 7-й Международной конференции по информационной безопасности ISC"04, предложив три различные версии распознавания образов капчи, и подтвердила эту гипотезу с помощью пользовательских исследований.
  • Организация Datta опубликовала свою работу на конференции ACM Multimedia "05, под названием IMAGINATION, предлагая систематический способ распознавания изображений Captcha. Картинки искажаются таким образом, что современные подходы к распознаванию изображений (которые являются потенциальными технологиями атаки) не распознают их.
  • Инженеры ИТ-гиганта Microsoft (Джереми Элсон, Джон Р. Дузер, Джон Хауэлл и Джаред Саул) разработали распознавание изображений видов животных для ограничения доступа (ASIRRA), которые просят пользователей различать кошек и собак. У Microsoft была бета-версия этого решения для использования веб-сайтами. Тесты показали, что люди успешно распознавали изображения в 99,6% случаев за 30 секунд. Это решение было описано в документе 2007 года к материалам 14-й конференции ACM по безопасности компьютеров и коммуникаций (CCS).
В чем разница между Captcha и reCaptcha?

Captcha — это тест на проверку личности (обычно это размытые буквы, которые необходимо расшифровать), используемые многими сайтами для предотвращения спама.

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

В настоящее время reCaptcha является наиболее популярной реализацией.

Применение

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

  • Перечисления (формы регистрации или сброса пароля часто уязвимы для атак злоумышленников — без Captcha хакер может получить действительные имена пользователей, номера телефонов или любую другую конфиденциальную информацию за короткое время).
  • Автоматическая отправка многих запросов GET/POST за короткое время, когда это нежелательно (например, получение SMS/MMS/электронной почты). В данном случае Captcha обеспечивает функцию ограничения скорости.
  • Автоматическое создание учетной записи, которая должна использоваться только людьми (например, создание учетных записей электронной почты, остановка спама).
  • Автоматическое размещение постов в блогах, форумах и вики-ресурсах.
  • Любые автоматические атаки, которые в массовом порядке получают или злоупотребляют конфиденциальной информацией из приложения.

Использование Captcha в качестве защиты от межсайтовой подделки запроса не рекомендуется, так как существуют более сильные контрмеры.

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

Капча (captcha) представляет из себя изображение с некоторым текстом, который предлагается набрать пользователю в поле ввода для подтверждения его "человечности". Дело в том, что человеку одинаково легко читать текст, независимо от того, является ли он непосредственно машинным текстом или изображением. В то время как компьютеру требуется гораздо более сложный алгоритм для "чтения" текста в виде картинки. Очевидно, что капча каждый раз должна отображать случайную последовательность символов.

Капчи используются, как правило, при заполнении каких-либо форм на сайте. Алгоритм работы следующий: на форме присутствует изображение-captcha с некой случайной последовательностью символов. Рядом с ним имеется поле для ввода содержимого капчи пользователем. Изображение, по сути, является PHP-скриптом, который его формирует. При этом сгенерированное текстовое содержимое капчи где-то сохраняется. При отправке формы скрипт сравнивает сохраненное значение капчи с тем, что ввел пользователь. Если значения совпадают, то запрос принимается, иначе отклоняется.

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

Обратите внимание, что для работы скрипта требуется PHP-расширение GD, подключите его в настройках.

Для начала необходимо определиться со шрифтом. Соответствующий выбранному шрифту ttf-файл необходимо положить в директорию с будущим скриптом капчи. Я для капчи выбрал шрифт Comic Sans MS , ему соответствует файл comic.ttf . Файлы шрифтов можно найти в системном каталоге шрифтов вашей операционной системы, либо загрузить из Интернета.

$letters = "ABCDEFGKIJKLMNOPQRSTUVWXYZ" ;

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

$caplen = 6 ;

В этой переменной задается длина капчи (6 символов).

$width = 120 ; $height = 20 ;

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

$font = "comic.ttf" ;

Здесь указывается файл шрифта. В принципе, его можно разместить в поддиректории, допустим, fonts, тогда содержимое переменной должно быть такого формата: fonts/comic.ttf .

$fontsize = 14 ;

Размер шрифта.

С переменными разобрались. Далее, приступаем непосредственно к реализации. Во-первых, необходимо указать клиенту запрошенного скрипта, что ответный контент представляет из себя не текст, а изображение. Для этого переопределяем содержимое HTTP-заголовка content-type:

header ("Content-type: image/png" ) ;

Создаем изображение с заданными размерами:

$im = imagecreatetruecolor ($width , $height ) ;

Выставляем флаг необходимости сохранения альфа-канала изображения:

imagesavealpha ($im , true ) ;

Создаем цвет фона. Это будет полностью прозрачный цвет:

$bg = imagecolorallocatealpha ($im , 0 , 0 , 0 , 127 ) ;

Заливаем этим цветом наше созданное изображение:

imagefill ($im , 0 , 0 , $bg ) ;

Этими действиями мы подготовили наше изображение для наложения на него капчи. Следующая строка необходима не всегда, зависит от настроек веб-сервера. Она переопределяет путь к поиску шрифтов. Оставьте ее закомментированной, если вдруг капча не будет формироваться при тестировании, а в логе ошибок Apache будет появляться ошибка "imagettftext(): Could not find/open font" , попробуйте ее раскомментировать:

//putenv("GDFONTPATH=" . realpath("."));

Инициализируем переменную, в которой будет содержаться текстовое значение капчи:

= "" ; for ($i = 0 ; $i < $caplen ; $i ++ )

На каждом шаге цикла генерируется очередной символ капчи и рисуется на изображении. Берем случайный символ из нашего алфавита и добавляем его в капчу:

.= $letters [ rand (0 , strlen ($letters ) - 1 ) ] ;

Вычисляем положение сгенерированного символа на изображении по оси x:

$x = ($width - 20 ) / $caplen * $i + 10 ;

Это положение зависит от ширины изображения, длины капчи и порядкового номера символа. Далее мы добавляем немного "случайности" в это положение:

$x = rand ($x , $x + 4 ) ;

Вычисляем положение сгенерированного символа на изображении по оси y:

$y = $height - ( ($height - $fontsize ) / 2 ) ;

Положение зависит от размера шрифта и высоты изображения.

Генерируем случайный цвет для символа. Этот цвет не должен быть слишком светлым, поэтому каждый из компонентов цвета (R, G и B) генерируем в диапазоне 0-100:

$curcolor = imagecolorallocate ( $im , rand (0 , 100 ) , rand (0 , 100 ) , rand (0 , 100 ) ) ;

Для текущего символа случайным образом генерируем его угол наклона в диапазоне -25..25 градусов, чтобы буквы на капче "плясали":

$angle = rand (- 25 , 25 ) ;

И, наконец, рисуем символ со всеми выше полученными характеристиками на изображении:

imagettftext ($im , $fontsize , $angle , $x , $y , $curcolor , $font , [ $i ] ) ;

На этой строке оканчивается тело цикла. Когда цикл отработает, в переменной будет содержаться текстовое значение капчи, а изображение im будет представлять из себя отрисованную капчу. Необходимо где-то сохранить значение капчи, чтобы основной скрипт, который использует ее, мог проверить значение пользователя. Лучшее для этого место - сессионная переменная. Инициализируем сессию и сохраняем значение капчи:

session_start () ; $_SESSION = ;

Наконец, выводим сформированное изображение captcha:

imagepng ($im ) ;

И освобождаем память, выведенную под изображение:

imagedestroy ($im ) ;

Ниже вы можете увидеть демонстрацию работы полученной капчи (попробуйте обновить изображение):

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

Сегодня мы поговорим о создании скрипта генерации случайной комбинации цифр на картинке, средствами 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 =0 xffffff ; - Цвет заливки фона изображения (каптчи).

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

if($txt_box