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

Прислано: neochief

вт, 19/02/2008 - 21: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') ,

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

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

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано player в вт, 19/02/2008 - 22:57.

спасибо.


Опубликовано VladSavitsky в ср, 20/02/2008 - 13:58.

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


Опубликовано VladSavitsky в ср, 20/02/2008 - 14:01.

В этом обзоре я кажется упоминал такой способ:
Ломаем captcha. Тестовое погружение в тему.


Опубликовано neochief в ср, 20/02/2008 - 14:45.

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


Опубликовано Natalie в ср, 20/02/2008 - 14:53.

Это дополнение к капче или отдельный модуль?


Опубликовано fasdalf@fasdalf.ru в ср, 20/02/2008 - 16:56.

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


Опубликовано neochief в ср, 20/02/2008 - 19:45.

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

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


Опубликовано neochief в чт, 21/02/2008 - 14:33.

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

$('.captcha').css('display','none');


Опубликовано Usernk в ср, 27/02/2008 - 09:32.

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


Опубликовано VladSavitsky в сб, 19/04/2008 - 11:46.

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


Опубликовано gorr в сб, 19/04/2008 - 16:22.

Спасибо, использовал здесь: http://fastctroi.ru ,все замечательно работает.
Правда сайт еще пуст.


Опубликовано andrey_rozum в вс, 15/06/2008 - 18:02.

Мне товарищ недавно сделал скрытую капчу, видимо этим модулем, после чего появление спама прекратилось.


Опубликовано neochief в ср, 03/09/2008 - 09:29.

Обновил модуль, пофиксив баг с несколькими формами на одной странице.


Опубликовано olk в ср, 03/09/2008 - 10: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. думаю автор меня простит за самовольное изменение ;)


Опубликовано FORTIS в вс, 21/12/2008 - 22:39.

ссылка на скачку больше не работает, вот новая http://drupaldance.com/files/hidden_captcha-6.x-1.2.zip


Опубликовано fasdalf@fasdalf.ru в вт, 23/12/2008 - 07:53.

А в проектах на drupal.org будет опубликовано?


Опубликовано neochief в вт, 23/12/2008 - 12:48.

Нет.


Опубликовано neochief в вс, 29/03/2009 - 20:07.

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


Опубликовано fasdalf@fasdalf.ru в пн, 30/03/2009 - 12:44.

Спасибо!


Опубликовано delvin в вс, 22/11/2009 - 20:34.

Да на Drupal 6.14 отлично работает. Спс.


Опубликовано Valeratal в пн, 21/12/2009 - 19:38.

у меня почему то показывается пользователям, хотя стоит

CAPTCHA: challenge "Math (hidden)" enabled

Так надо?


Опубликовано FORTIS в пн, 21/12/2009 - 20:09.

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


Опубликовано Valeratal в вт, 22/12/2009 - 04:16.

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

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

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


Опубликовано FORTIS в чт, 24/12/2009 - 12:28.

а зачем переносил вниз?


Опубликовано Valeratal в чт, 24/12/2009 - 12:56.

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


Опубликовано FORTIS в чт, 24/12/2009 - 13:26.

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


Опубликовано Valeratal в чт, 24/12/2009 - 13:58.

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

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


Опубликовано neochief в чт, 24/12/2009 - 17:09.

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


Опубликовано Valeratal в чт, 24/12/2009 - 17:20.

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

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


Опубликовано FORTIS в чт, 24/12/2009 - 18:47.

посмотри исходники  jsalter или  jsregistry
думаю там должен быть ответ :)


Опубликовано Valeratal в чт, 24/12/2009 - 18:53.

Ок, подумаю
Пока отключу для комментариев капчу.


Опубликовано FORTIS в вт, 29/12/2009 - 05:59.

Valeratal

<?php
  // we don't need to print out $scripts since we want to take out autocomplete.js
  // print $scripts;
 
  // this returns the array of JavaScript files for the header
  $js = drupal_add_js(NULL, NULL, 'header');
  unset($js['module']['misc/autocomplete.js']);
  print drupal_get_js('header', $js);
?>


Опубликовано Valeratal в вт, 29/12/2009 - 09:37.

Спасибо


Опубликовано FORTIS в вт, 19/01/2010 - 08:17.

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


Опубликовано index в чт, 18/03/2010 - 07:56.

"FORTIS" написал(а):

скрытая капча не работает с 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);

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


Опубликовано FORTIS в чт, 18/03/2010 - 08:01.

работает :)


Опубликовано eagle в вс, 21/03/2010 - 18:38.

"neochief" написал(а):

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

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


Опубликовано index в сб, 09/07/2011 - 23: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/10/2010 - 08: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 в пн, 22/11/2010 - 11: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 в вс, 18/12/2011 - 20:14.

В 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 в ср, 22/02/2012 - 13:59.

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


Новое на сайте

Ссылки партнёров