Защита форм ввода с помощью буквенно-цифровой картинки (капчи)


Памяти Светланы посвящается.


Ссылки

Введение

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

Структура капчи

Капча является методом ядра InstantCMS. При обращении к капче присходит генерация случайного буквенно-цифрового кода. Затем этот код преобразуется в графические символы и помещается на страницы Вашего компонента (как правило, файлы с расширением *.tpl.
Затем данные из файла *.tpl пересылается в файл frontend.php Вашего компонента.
Подробнее о структуре компонента читайте соответствующую статью .
Пересылка происходит с помощью методов ядра InstantCMS. В файле frontend.php происходит прием кода и сравнение его исходным. Остальное зависит от Вашего мастерства программиста.

Помещение капчи в файлы с расширением *.tpl

Для помещения картинки с капчой на Ваши страницы необходимо в файл с расширением *.tpl вставить совсем небольшой код:

{captcha}

Однако капча служит для защиты форм, поэтому помещение этого кода на страницу ни к какому результату не приведет, кроме появления красивой картинки с сгенерированным в ядре паролем. Этот код следует поместить внутрь защищаемой формы, например:

<form method="post" action="здесь/URL/для_роутера/Вашего_компонента" enctype="multipart/form-data">
  <input  ...другие пересылаемые данные... /> 
  {captcha}
  <button type="submit" style="border:0px;" title="{$LANG.YES}">
   <img alt="{$LANG.ADD_EXPONAT}" src="/images/museum/icons/bottom_YES.png" border="0" />
  </button>
</form>

В данном случае пересылка данных формы происходит при нажатии на картинку-кнопку bottom_YES.png. Перед нажатием на кнопку следует ввести капчу, которая будет отправленна вместе с другими данными.

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

Прием значений капчи в файле frontend.php компонента

Прежде всего капчу следует принять с помощью ядерного метода Инстанта:

$captcha = cmsCore::request('code', 'str');

Затем следует ее проверка:

if(!cmsCore::checkCaptchaCode($captcha)){ 
    // ....здесь код, который следует выполнить, в случае, если капча проверку не прошла, например, редирект на страницу с Вашей формой
}
// ......здесь код, который выполняется, если капча прошла проверку

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


Написал stroller7


Ссылки
 
справочник/защита_форм_ввода_капчой_картинкой_с_кодом.txt · Последние изменения: 2013/04/13 16:43 От stroller7