Really Simple CAPTCHA для WordPress
Really SimpleCAPTcha: эффективный плагин для WordPress
Really Simple CAPTcha – это подключаемый модуль WordPress, который позволяет пользователям WordPress создавать свои собственные капчи. У этого плагина есть ряд преимуществ, и все они связаны с тем, что он хранит случайный ключ для каждого пользователя и генерирует код автоматически. С помощью этого плагина вы можете легко избежать заполнения форм вручную, и вам просто нужно установить настройки, которые заставят плагин работать.
Really Simple CAPTcha на самом деле является вторым шагом к предотвращению автоматической рассылки спама. Первым было создание плагина WordPress под названием «Предотвращение спама», но этот плагин оказался недостаточно эффективным, и некоторые блоггеры начали искать что-то получше. Вскоре они узнали, что есть несколько доступных вариантов, и один из них — CAPTCHAS. Этот плагин фактически хранит случайный ключ для каждого пользователя и, таким образом, предотвращает заполнение полей роботами.
Вы также можете загрузить Really Simple CAPTAX с простыми пошаговыми инструкциями с официального сайта Такаюки Миёси. Скачать плагин очень просто, все, что вам нужно сделать, это найти его в репозитории плагинов WordPress. Настроить плагин легко, и после того, как вы отправите свою первую форму, плагин покажет вам подтверждающее сообщение, подтверждающее, что вы хотите включить плагин. Если вас устраивает, как работает плагин, вы можете просто оставить его включенным и постоянно отправлять формы CAPTAX.
Really simple captcha что это
В большинстве случаев, вы можете установить плагин прямо из WordPress.
В любом случае, если вы устанавливаете плагин вручную, просто следуйте этой инструкции:
- Загрузите весь каталог really-simple-captcha в каталог /wp-content/plugins/ .
- Активируйте плагин на странице «Плагины» в панели управления WordPress.
Для справки: У этого плагина нет страницы в «панели управления».
Часто задаваемые вопросы
CAPTCHA не работает; изображение не показывается.
Для работы Really Simple CAPTCHA необходимо установить библиотеки GD и FreeType. Попросите сделать это у своего системного администратора или у технической поддержки вашего хостинга.
Также установите права доступа для временного каталога, которых хватит для записи. Месторасположением временного каталога вы можете управлять с помощью переменной tmp_dir в классе ReallySimpleCaptcha. Обратите внимание, что настройка зависит от вызывающего плагина. Например, Contact Form 7 использует wp-contents/uploads/wpcf7_captcha как временный каталог, но может использовать и другую – в зависимости от ваших настроек.
Если у вас появились вопросы, задайте их на форуме технической поддержки.
Really Simple CAPTCHA – очень простая капча для WordPress
Расширение Really Simple CAPTCHA представляет собой специальный модуль для установки капчи, который призван помочь в устранении спама на сайте, создан для другого полезного расширения системы WordPress под названием Contact Form 7. Данное решение не работает в одиночном режиме и требует для работы другой плагин. Хотя изначально он был создан для вышеуказанного модуля, вы сможете его использовать с другим плагином.
Примечание: это расширение действительно очень простое, поэтому для полноценной защиты собственного блога используйте иные решения.
Как оно работает?
Компонент не использует абсолютно PHP сессии для сохранения состояний, как многие другие решения подобного рода, но хранит их в качестве временных файлов. Это позволяет встроить плагин в WordPress не боясь за возможные конфликты.
В то время, когда генерируется капча, плагин создаёт 2 файла для неё – один для изображения и один для текстового файла, который хранит правильный ответ.
2 файла имеют один и тот же префикс в своих названиях, например, “df78hfjf.png” и df78hfjf.txt. В случае если респондент отвечает неправильно на вопрос капчи, тогда она подсчитывает хэш и снова тестирует сохраненные данные в текстовом файле. При совпадении имён ответ подтверждается.
Как использовать с плагином
Примечание: ниже приведены инструкции по внедрению капчи для разработчиков.
Для начала необходимо создать содержимое ReallySimpleCaptcha класса:
$captcha_instance = new ReallySimpleCaptcha();
Вы можете изменить переменные на свои.
// Изменяем цвет фона для изображения капчи на чёрный $captcha_instance->bg = array( 0, 0, 0 );
Смотрите файл с названием really-simple-captcha.php, если вы желаете поменять переменные.
Генерирование случайного слова для капчи
$word = $captcha_instance->generate_random_word();
Производит файл с изображением и соотносит его с текстовым во временной директории.
$prefix = mt_rand(); $captcha_instance->generate_image( $prefix, $word );
Затем показывает снимок и получает ответ от пользователя.
Проверка правильности ответа
$correct = $captcha_instance->check( $prefix, $the_answer_from_respondent );
Если $correct является верным значением, то продолжаем. В ином случае блокируем респондента – так как это может быть робот.
И наконец, удаляем временное изображение и текстовые файлы, так как они больше не нужны.
$captcha_instance->remove( $prefix );
Пример взлома простой капчи за 15 минут с помощью машинного обучения
А именно самого используемого в мире плагина для WordPress Really Simple Captcha.
Капча (CAPTCHA) — надоедливая картинка с текстом, который надо ввести, чтобы попасть на сайт. Капчу придумали чтобы роботы не могли автоматически заполнять формы, и чтобы владельцы сайта были уверены, что пользователь — человек. С развитием машинного обучения и машинного зрения, ее зачастую стало довольно просто взломать.
Я прочел отличную книгу: Deep Learning for Computer Vision with Python, которую написал Adrian Rosebrock. В этой книге Адриан описывает способ, которым он взломал капчу на сайте E-ZPass New York используя машинное обучение:
У Адриана не было доступа к исходному коду, генерирующему капчу. Чтобы обучить модель, ему пришлось скачать тысячи картинок и вручную разметить все надписи.
Но предположим, что мы хотим взламывать капчу, к исходному коду которой у нас есть доступ.
Я зашел на WordPress.org Plugin Registry и ввел в поиске “captcha”. Первый результат назывался “Really Simple CAPTCHA” и установлен более миллиона раз.
И самое крутое — он с открытыми исходниками! Раз у нас есть алгоритм, генерирующий картинку, его, должно быть, не сложно взломать. Чтобы было сложнее, ограничим себе время. Можно ли уложиться в 15 минут? Давайте попробуем!
Важное замечание: Это ни в коем случае не критика плагина “Really Simple CAPTCHA” или его автора. Сам автор указал, что плагин более не является надежным и рекомендует использовать что-нибудь другое. Это просто небольшой интересный челлендж. Если вы один из того миллиона пользователей, установивших его, то возможно вам стоит сменить данный плагин на что-нибудь другое 🙂
Челлендж
Для начала посмотрим на изображения, создаваемые Really Simple CAPTCHA. На демке видим это:
Итак, капча состоит из четырех букв. Убедимся в этом, посмотрев исходники:
Так как у нас есть исходный код плагина, создающего капчу, мы можем его использовать, чтобы нагенерировать 10,000 изображений, и для каждого будет известна расшифровка.
Пару минут повозившись с кодом и добавив в него простой цикл ‘for’, я получил папку с обучающими данными — 10,000 PNG файлов, в названии которых указан правильный ответ:
В этом и только в этом месте я не дам вам рабочий пример кода. Мы делаем это в образовательных целях, и мне не хочется, чтобы вы заспамили реальные сайты, работающие на WordPress. Вместо этого, я дам ссылку на 10,000 изображений, сделанных мной, чтобы вы могли повторить мой результат.
Упрощаем задачу
Теперь, когда есть обучающие данные, мы могли бы их использовать напрямую, обучив по ним нейросеть:
С достаточным количеством данных, этот подход мог бы даже сработать. Но можно сделать задачу гораздо проще. Чем проще задача, тем меньше нам понадобится обучающих данных и вычислительных ресурсов, чтобы ее решить. У нас ведь всего лишь 15 минут!
К счастью, капча состоит всего из четырех символов. Если как-нибудь разделить ее так, чтобы каждая буква была отдельным изображением, то можно будет обучить нейросеть распознавать по одному символу за раз:
У меня нет времени разрезать каждую из 10,000 картинок в фотошопе. Это бы заняло несколько дней, а у меня осталось всего 10 минут. И нельзя просто автоматически разделить все картинки на 4 одинаковых куска. Потому что алгоритм задает символам случайное горизонтальное положение:
Символы сдвинуты случайным образом, чтобы изображение было сложнее разделить.
К счастью, это всё же можно автоматизировать. При обработке изображений часто приходится находить связные области из пикселей одного цвета. Границы таких областей называют контурами. В OpenCV есть встроенная функция findContours(), которую мы используем, чтобы найти связные области.
Итак, начнем с изображения капчи:
Преобразуем изображение в бинарное (это называется thresholding), чтобы было легче найти связные области:
Далее, используем функцию findContours(), чтобы выделить связные группы пикселей, состоящие из одного цвета:
Теперь, нужно просто сохранить каждый прямоугольник как отдельное изображение. И, так как мы знаем последовательность символов в каждом изображении, можно подписать каждый прямоугольник своим символом при сохранении.
Погодите-ка! Тут есть проблемка! Буквы в капче иногда накладываются друг на друга:
И наш алгоритм отмечает их как одну:
Если проблему не решить, то у нас будут плохие обучающие данные. Это нужно исправить, потому что с такими данными мы обучим модель распознавать эти две слившиеся буквы как одну.
Простой выход из этой ситуации сказать, что если какой-то прямоугольник в ширину сильно больше, чем в высоту, то это нужно считать двумя буквами. В этом случае, прямоугольник можно просто разрезать посередине и считать, что этот два прямоугольника:
Мы разделим пополам все прямоугольники, ширина которых сильно превышает высоту, и будем считать их за две буквы. Способ слегка “химический”, но с этими капчами работает.
Теперь, когда у нас есть способ извлекать из капчи отдельные буквы, давайте прогоним наш алгоритм через весь датасет. Цель — получить много вариантов написания для каждой буквы. Каждую букву можно сохранять в отдельную папку.
Вот так выглядит моя папка с буквой “W” после того, как я запустил свой алгоритм:
Некоторые буквы “W”, вытащенные из наших 10,000 изображений. У меня всего получилось 1,147 разных “W”.
Прошло: 10 минут…
Создаем и обучаем нейросеть
Так как нам нужно всего лишь распознавать одну букву или цифру, нейросеть со сложной архитектурой не потребуется. Распознавание символов — это гораздо более простая задача, чем распознавание сложных изображений, к примеру, кошек и собак.
Будем использовать простую сверточную нейросеть с двумя сверточными (convolutional) слоями и двумя полносвязными (dense):
Задать архитектуру нейросети используя Keras можно всего в несколько строк:
А в командной строке вот так:
Попробовать самому!
Если хотите попробовать сами, то возьмите код здесь. Он включает 10,000 картинок и код для каждого шага в этой статье. Инструкция к запуску в файле README.md.
Но если хочется вникнуть и понять, что делает каждая строчка кода, советую купить книгу Deep Learning for Computer Vision with Python. Она содержит более детальное объяснение и кучу разобранных примеров. Это единственная книга из тех что я видел, в которой объясняется и как это работает, и как это использовать, чтобы решать реальные и сложные задачи. Рекомендую!
Перевел Руслан Байназаров, оригинал — Adam Geitgey