Модуль "Скрытая капча"

Главные вкладки

Аватар пользователя neochief neochief 20 февраля 2008 в 0:57

Представляю вашему вниманию свой мини-модуль "Скрытая капча". Фишка этого модуля в том, что поле для ввода капчи является скрытым и заполняется джаваскриптом автоматически. Т.е. пользователь вообще не догадывается о наличии капчи на форме. По сути, это та самая элементарная джава-скриптовая капча против спамботов, о которой каждый хоть раз задумывался. Для пользователей без джаваскрипта отображается стандартная капча.

Плюс: можно сказать "прощай" уродливой друпаловской капче и процессу капчезаполенния вообще. Как следствие - довольные юзера.
Минус: от нацеленной спам-атаки модуль не спасет (а что спасет?)

Для тех, кому интересно как он работает

Данный модуль основан на стандартной мат. капче с небольшой модификацией.
Кусок модуля:

///....
 $result['form']['captcha_response'] = array(
 '#type' => 'textfield',
 '#title' => t('Math Question'),
 '#description' => t('Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.'),
 '#field_prefix' => t('x + y = ', array('x' => $x, 'y' => $y)),
 '#size' => 4,
 '#maxlength' => 2,
 '#required' => TRUE,
 '#suffix' => drupal_add_js("$('.captcha').css('display','none'); $('#edit-captcha-response').attr('value',$answer);",'inline','footer') ,
);
//....

Этот суффикс вставляет джаваскрипт, который и скрывает форму, а потом заполняет поле.

  '#suffix' => drupal_add_js("$('.captcha').css('display','none'); $('#edit-captcha-response').attr('value',$answer);",'inline','footer') ,

Этот прием можно применить не только к мат. капче, но тут дело уже за вами, дерзайте Smile

Качать здесь: Модуль Скрытая капча

ВложениеРазмер
Иконка пакета hidden_captcha.zip1.37 КБ

Комментарии

Аватар пользователя VladSavitsky VladSavitsky 20 февраля 2008 в 16:58

Что-то у меня большие сомнения по поводу безопасности такого приёма.
Кстати, то же самое можно сделать иначе - просто в форму встраивается скрытое поле, которое JS заполняет. Сервер получает форму - если поле заполнено (у клиенты есть JS), то считаем его человеком, если не заполнено - бот.
Тоже спорный метод, но очень похож на ваш. Где читал об этом не вспомню - может быть и модуль такой уже есть для Друпала...

Аватар пользователя neochief neochief 20 февраля 2008 в 17:45

Повторюсь, что способ не спасет от преднамеренной заточки бота под сайт. Но если этого не будет (99% случаев), то спасет от случайного спама и облегчит жизнь юзерам. Данное решение считаю самым простым и эффективным, потому что писать вообще ничего не надо, а вставлять можно куда только подставляет модуль CAPTCHA Smile

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 20 февраля 2008 в 19:56

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

Аватар пользователя neochief neochief 20 февраля 2008 в 22:45

Это дополнение к капче. По сути - та же мат.капча, только с бонусом.

Бывает ходят. Но это из ряда заточки под сайт.

Аватар пользователя neochief neochief 21 февраля 2008 в 17:33

Обновил пример и модуль. Оказывается под Safari джейквери совсем не хочет исполнять функцию hide(). Заменил на установку видимости через CSS:

$('.captcha').css('display','none');
Аватар пользователя Usernk Usernk 27 февраля 2008 в 12:32

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

Аватар пользователя VladSavitsky VladSavitsky 19 апреля 2008 в 15:46

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

Аватар пользователя olk olk 3 сентября 2008 в 14:18

Хочу так же заметить, что если чуть чуть поменять info файл, а имено

name = hidden_captcha
description = "Hidden math captcha"
package = "Spam control"
version = "6.x-1.0"
project = "hidden_captcha"
dependencies[] = captcha
core = "6.x"

Вставить приведенный текст вместо существующего, то модуль отлично работает и в шестерке ...
ps. думаю автор меня простит за самовольное изменение Wink

Аватар пользователя Valeratal Valeratal 22 декабря 2009 в 7:16

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

может быть конечно из-за того, что я перенес подключение ява-скриптов вниз, к закрывающему тэгу body (у меня не работают также и аякс комментарии)

попробую с другой темой

Аватар пользователя Valeratal Valeratal 24 декабря 2009 в 15:56

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

Аватар пользователя FORTIS FORTIS 24 декабря 2009 в 16:26

может тебе попробовать WEB Optimizator? он это делает, у него может лучше получится Smile а там посмотришь результат, что и куда он воткнул и можешь сам потом сделать.
http://webo.in/articles/all/2009/05-drupal-performance/

Аватар пользователя Valeratal Valeratal 24 декабря 2009 в 16:58

не, пока не пробовал именно оптимизатор
но как раз оттуда

Правило шестое: располагаем JS в конце страницы
я и переносил

Аватар пользователя neochief neochief 24 декабря 2009 в 20:09

Есть разница между располаганием ненужных скриптов внизу и располаганием JQuery тоже внизу. Делая так, вы ломаете все инлайн-срипты на странице. Поэтому и не работает.

Аватар пользователя Valeratal Valeratal 24 декабря 2009 в 20:20

Дык, как я объясню друпалу - во те, нужные, а вот те - не нужные, если у меня вообще включено сжатие скриптов

Наверно таки придется вертать взад

Аватар пользователя index index 18 марта 2010 в 10:56

"FORTIS" wrote:
скрытая капча не работает с CAPTCHA 2.1 =(

Вроде бы…
hidden_image_captcha/hidden_image_captcha.module, строка 7:

        list($font, $errmsg, $errvar) = _image_captcha_get_font();

заменить на:

        $fonts = _image_captcha_get_enabled_fonts();
        list($font, $errmsg, $errvar) = _image_captcha_check_fonts($fonts);

Правил методом тыка. Сообщите — работает ли…

Аватар пользователя iryston iryston 21 марта 2010 в 21:38

"neochief" wrote:
Выпустил версию для Image капчи. Из новых фичей — теперь решение капчи не лежит в коде страницы плеинтекстом. Ссылка для скачивания.

Странно, поставил captcha, image_captcha, настроил - все нормально.
После включения hidden_image_captcha перестала открываться страница admin/user/captcha
а на страничке с формой обратной сязи (contact) каптча видна.

Аватар пользователя index index 10 июля 2011 в 3:06

У меня admin/user/captcha доступна, однако на странице contact имидж_капча торчит, подтверждаю.

Как я понял, это безобразие случается, когда на одной странице несколько форм с капчей и, соответственно, несколько раз вызывается behavior с именем hidden_captcha.

Удалось исправить. hidden_image_captcha.module, строка 21:

$result['form']['captcha_response']['#suffix'] .= '<script type="text/javascript">
Drupal.behaviors.hidden_captcha = function(){
  $("#edit-captcha-response.c'
.$rand.'").parents(".captcha").css("display", "none");
  $("#edit-captcha-response.c'
. $rand .'").each(function(){
    $(this).attr("value", "'
. ($result['solution']) .'");
  });
}</script>'
;

Заменить на:

$result['form']['captcha_response']['#suffix'] .= '<script type="text/javascript">
Drupal.behaviors.hidden_captcha'
. $rand .' = function(){
  $("#edit-captcha-response.c'
. $rand .'").parents("fieldset.captcha").css("display", "none");
  $("#edit-captcha-response.c'
. $rand .'").each(function(){
    $(this).attr("value", "'
. ($result['solution']) .'");
  });
}</script>'
;

т.е. добавил $rand к имени метода. Работает.

Аватар пользователя каранёвы каранёвы 18 октября 2010 в 12:55

Fatal error: Call to undefined function _image_captcha_get_font() in /home/musionby/www/reggae.by/sites/all/modules/hidden_image_captcha/hidden_image_captcha.module on line 7

Подскажите, пожалуйста, что можно сделать, чтобы все работало?

Аватар пользователя Gyrje Gyrje 22 ноября 2010 в 14:24

Сведения об ошибке на веб-странице

Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; InfoPath.1; OfficeLiveConnector.1.5; OfficeLivePatch.1.3)
штамп времени: Thu, 4 Nov 2010 07:45:53 UTC

Сообщение: 'Drupal' - определение отсутствует
Строка: 48
Символ: 1
Код: 0
URI-код: http://www.мойдомен.ru/user/password

Аватар пользователя T-34 T-34 10 ноября 2015 в 11:47

В hidden_image_captcha.module
заменить

<?php
      
list($font$errmsg$errvar) = _image_captcha_get_font();
?>

на

<?php
      $fonts 
_image_captcha_get_enabled_fonts();
      list(
$font$errmsg$errvar) = _image_captcha_check_fonts($fonts);
?>
Аватар пользователя kstukstu kstukstu 22 февраля 2012 в 17:59

А на 7-ку модуль будет портирован? Такая штука полезная, а в 7-ке приходится мириться с обычной катчей...