./comments
./contacts telegram: @stikname
email: ;

Как сделать свою капчу

PHP
Как сделать свою капчу на php


Для тех, кто не в курсе: капча — это проверка на человечность. Ни что иное как борьба со спамом. Попытка не допустить автоматических действий роботов. Используется везде, где только присутствуют формы. Отправка комментария, заказ товаров или сообщение администратору, добавление контента (при количестве авторов > 1), регистрация, иногда даже вход в защищённую зону — все эти нежные места сайта охраняются ею (капчей).

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

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

Итак, о чём мы. Капча бывает разная (удержусь от перечисления видов). На счёт эффективности и степени раздражения пользователя можно спорить долго. Кому-то нравится вводить буковки, кому-то — дёргать рычажки, кому-то — решать задачки, кому-то — кликать по чекбоксу. Однако все согласятся, что если бы капчи не было вообще, им стало бы комфортней. Поэтому следует делать её как можно незаметней.

Оригинальному проекту — оригинальная капча
Создавая свой оригинальный проект, никак не хочется вешать на него стандартные решения в виде кривых буковок или математических задач. К тому же, все эти «хитрые» алгоритмы давно распознаются «умными» роботами. Поэтому «защита» из них хреновая.

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

Капча «Я не робот»
Очень простое решение защиты от спама в виде чекбокса под названием AmCaptcha реализовал Алексей Московский (изначально идея Dimoning'а) в виде плагина для WordPress. Идея до безобразия проста — при клике по чекбоксу небольшой javascript изменяет значение скрытого поля <input type="hidden" name="antispam" value="spam">, а потом при обработке формы сервер проверяет это значение if($_POST['antispam']==="spam") exit("да это эже спам!");.

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

Это решение имеет только один заметный минус — работа только при включённом javascript у пользователя. Однако это можно доработать при желании. Об этом я расскажу чуть позже.

Конечно использовать плагин ВП на своём сайте не получится. Нужно будет доработать код. Возможно как-нибудь сделаю это я (или сам Алексей) и выложу в паблик.

Этот метод можно использовать в любом месте сайта. Он не особо надоедает визуально, но требует места в форме. К тому же пользователь должен понимать, что это капча.

Капча на основе Confirm
Ещё более простой и менее надоедливый метод капчи — это использование javascript события confirm. Вы же используете javascript валидацию форм на своём сайте? ;) Просто добавьте ещё одно условие.

Должно получиться что-то типа того:
function validator(form) {
if (form.name.value==="") { alert("Пожалуйста, укажите Ваше имя."); form.name.focus(); return false; }
if (form.email.value==="") { alert("Вы должны указать свой email адрес."); form.email.focus(); return false; }
if (form.text.value==="") { alert("Вы не заполнили поле сообщения."); form.text.focus(); return false; }
if (confirm("Проверьте ваши данные перед отправкой, чтобы мы могли с вами связаться. Всё верно?")) form.nospam.value="itsnospam"; else return false;
return true;
}


Как всегда всё чрезвычайно просто. При нажатии всплывает формочка с текстом «Проверьте ваши данные перед отправкой, чтобы мы могли с вами связаться. Всё верно?» и вариантами ответа «Ок» и «Отмена». Пользователь может нажать «Отмену» и действительно проверить введённые данные (ещё один плюс). Имхо это очень удобно. Причём пользователь даже и не подумает, что это капча. Ведь это всего лишь напоминание о правильности данных.
Этот метод строится также, как и предыдущий, на изменении скрытого поля, которое проверяется при обработке формы. И точно также серьёзно стоит подойти к генерации значения.

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

Если JavaScript отключён
Не стоит пренебрегать пользователем, у которого отключен javascript. Это касается обоих описанных методов защиты от спама. Я предлагаю сделать дополнительную обработку и в случае отключённых скриптов отправлять посетителя на страницу с подтверждением человечности. Вот тут можно использовать и классическую капчу с циферками и задачками. Ведь очень немногие пользователи увидят эту страницу. Или можно не использовать капчу вообще — роботы ведь не должны попасть на эту страницу.

Предпросмотр вместо капчи
Очень логичное решение. Пользователю предлагается просмотреть, как будет выглядеть введённая им информация, до отправки данных на сервер.

Механизм очень прост. В форму добавляется кнопка «Предпросмотр», при нажатии которой происходит обработка формы и вывод на экран введённых пользователем данных. Кнопку «Отправить» при этом следует делать неактивной до наступления события предпросмотра.

Как вы уже наверно догадались, при предпросмотре происходит не только разблокировка кнопки «Отправить» (от роботов она ведь не блокируется). Также изменяется какой-то параметр. Например, скрытое поле. А затем производится проверка на сервере.

Огромный плюс этого метода в том, что все обработки происходят на сервере вне зависимости от жаваскрипта. Что более безопасно и защищено от анализа спамерами.

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

Послесловие
Будьте оригинальны. Экспериментируйте и создавайте свои методы надёжной и ненавязчивой капчи. Ведь разным проектам подойдут совершенно разные методы. К тому же, не стоит все формы (если у вас много разновидностей таковых) обрабатывать одинаково. Посетитель должен быть доволен.
22.01.2013 02:46:19
stk
2172
27
Комментарии

sanchos(человек
13.04.2013 20:20:45
+
тест
07.06.2013 10:44:11
тест
222
07.06.2013 10:44:38
<>
111
07.06.2013 10:46:09
проверка на js
<script>alert('Нужно убрать уязвимость');</script>
111
07.06.2013 10:47:51
<a>111</a>
111
07.06.2013 10:48:56
Нормально
111
07.06.2013 10:49:59
yandex.ru
111
07.06.2013 10:50:38
Пойдет
stk
07.06.2013 12:57:41
Хорош :D
ler
23.06.2013 00:19:38
кто-то хотел пилюлю прописать бложику :)
stk
24.06.2013 20:32:38
Да уж... пытался прыгнуть выше головы. Вот интересно... что бы помочь или же навредить :)
11
31.07.2013 10:37:33
qu
Dme
08.01.2014 02:01:11
Спасибо
sdf
13.05.2014 11:05:42
sdf
ДЖЕК
23.09.2014 04:22:45
Это правильно
Вася
13.12.2014 22:00:30
Тест
ить
26.12.2014 13:00:26
ить
Анн
26.12.2014 19:54:34
Интересненько
Porno Manager
18.01.2015 00:18:17
Не очень красиво - код вылазит...
clip2net.com/clip/m259650/e09b3-clip-102kb.jpg
stk
18.01.2015 03:58:47
Очень странно, у меня во всех браузерах нормально отображается. Что за браузер и ОС ?
garis
18.02.2015 23:18:19
так так
jhjh
27.08.2015 15:13:57
jhjhj
Оу
22.10.2015 11:47:48
О_о
ravilka
23.10.2015 20:06:32
Супер статья))
SatuR
20.05.2016 18:44:48
привет мне нравиться
stk
20.05.2016 18:54:51
SatuR, это хорошо, но всё же посети tsya.ru :)
вик
27.01.2017 20:59:45
надо попробовать