Captcha


Назначение

Сервис предназначен для защиты форм от автоматического ввода различного рода скриптами-роботами. Пользователю показывается картинка, цифры и буквы на которой с большой вероятностью может распознать только человек. CAPTCHA - "completely automated public Turing test to tell computers and humans apart", что в переводе означает "полностью автоматизированный общедоступный тест Тьюринга на разделение машин и людей".

Ключи

width Число, указывающее ширину картинки с контрольной строкой в пикселах. Если параметр не задан или пустой, принимается значение 150px.
height Число, указывающее высоту картинки с контрольной строкой в пикселах. Если параметр не задан или пустой, принимается значение 50px.
code_length Число, указывающее длину контрольной строки. Если параметр не задан или пустой, принимается значение 6.
params HTML строка, которая добавляется в тэг IMG при формировании картинки с контрольной строкой.
part Строка, определяющая что именно рисовать на странице. Принимает одно из следующих значений:

  • image (рисует картинку)
  • field (рисует поле для ввода)
  • both (рисует все вместе)

Если ключ не задан или пустой, принимается значение both.

Комментарии

Данный макрос позволяет встроить в любую форму два блока: графический (с искаженными цифрами и буквами) и поле для ввода строки человеком. Если введенная в форме строка совпадает с изображенной на картинке, то в дальнейшем защищенная форма отрабатывается как обычная. Все действия по информированию пользователя об ошибке производятся уже с участием макроса $Form[]$.

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

На одной странице может находиться только одна макроподстановка $Captcha[]$ (или одна пара вызовов, если рисуется отдельно графика и отдельно поле ввода).

Для работы данного макроса необходима графическая библиотека ImageMagick.

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

Примеры

Пример №1
Вывод картинки и поля ввода строки
$Captcha[width: 150; height: 50; code_length: 6; params="border=0 style='cursor: hand'"; part: both]$

Пример №2
Раздельный вывод картинки и поля для ввода строки
<TABLE cellSpacing=0 cellPadding=0 border=0><BR>
<TR>
    <TD>$Captcha[part: field]$</TD>
    <TD>$Captcha[width:120; height:40; part:image]$
<TR>
</TABLE>