Модуль "Скрытая капча"
Прислано: 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') ,
Этот прием можно применить не только к мат. капче, но тут дело уже за вами, дерзайте :)
Качать здесь: Модуль Скрытая капча
- neochief's blog
- Для комментирования войдите или зарегистрируйтесь
спасибо.
- Для комментирования войдите или зарегистрируйтесь
Что-то у меня большие сомнения по поводу безопасности такого приёма.
Кстати, то же самое можно сделать иначе - просто в форму встраивается скрытое поле, которое JS заполняет. Сервер получает форму - если поле заполнено (у клиенты есть JS), то считаем его человеком, если не заполнено - бот.
Тоже спорный метод, но очень похож на ваш. Где читал об этом не вспомню - может быть и модуль такой уже есть для Друпала...
- Для комментирования войдите или зарегистрируйтесь
В этом обзоре я кажется упоминал такой способ:
Ломаем captcha. Тестовое погружение в тему.
- Для комментирования войдите или зарегистрируйтесь
Повторюсь, что способ не спасет от преднамеренной заточки бота под сайт. Но если этого не будет (99% случаев), то спасет от случайного спама и облегчит жизнь юзерам. Данное решение считаю самым простым и эффективным, потому что писать вообще ничего не надо, а вставлять можно куда только подставляет модуль CAPTCHA :)
- Для комментирования войдите или зарегистрируйтесь
Это дополнение к капче или отдельный модуль?
- Для комментирования войдите или зарегистрируйтесь
Некоторые спам-боты ходят по сайтам браузером. То ди от кривости рук авторов, то ли потому что броузер выполняет скрипты и грузит катринки.
- Для комментирования войдите или зарегистрируйтесь
Это дополнение к капче. По сути - та же мат.капча, только с бонусом.
Бывает ходят. Но это из ряда заточки под сайт.
- Для комментирования войдите или зарегистрируйтесь
Обновил пример и модуль. Оказывается под Safari джейквери совсем не хочет исполнять функцию hide(). Заменил на установку видимости через CSS:
$('.captcha').css('display','none');
- Для комментирования войдите или зарегистрируйтесь
Видел сайтец где людям дают по центу чтоли за то что они вводят числа и текст с картинки ;). я так понял им их спам бот дает - а люди вводят. Вот такой вот оригинальный подход к обходу капчи...
- Для комментирования войдите или зарегистрируйтесь
Ещё проще метод - спам бот считывает картинку с сайта и показывает её человеку, который хочет посмотреть порнографию. Он вводит - ему показывают то, что он хотел - все довольны и спам продолжает умножаться...
- Для комментирования войдите или зарегистрируйтесь
Спасибо, использовал здесь: http://fastctroi.ru ,все замечательно работает.
Правда сайт еще пуст.
- Для комментирования войдите или зарегистрируйтесь
Мне товарищ недавно сделал скрытую капчу, видимо этим модулем, после чего появление спама прекратилось.
- Для комментирования войдите или зарегистрируйтесь
Обновил модуль, пофиксив баг с несколькими формами на одной странице.
- Для комментирования войдите или зарегистрируйтесь
Хочу так же заметить, что если чуть чуть поменять 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. думаю автор меня простит за самовольное изменение ;)
- Для комментирования войдите или зарегистрируйтесь
ссылка на скачку больше не работает, вот новая http://drupaldance.com/files/hidden_captcha-6.x-1.2.zip
- Для комментирования войдите или зарегистрируйтесь
А в проектах на drupal.org будет опубликовано?
- Для комментирования войдите или зарегистрируйтесь
Нет.
- Для комментирования войдите или зарегистрируйтесь
Выпустил версию для Image капчи. Из новых фичей — теперь решение капчи не лежит в коде страницы плеинтекстом. Ссылка для скачивания.
- Для комментирования войдите или зарегистрируйтесь
Спасибо!
- Для комментирования войдите или зарегистрируйтесь
Да на Drupal 6.14 отлично работает. Спс.
- Для комментирования войдите или зарегистрируйтесь
у меня почему то показывается пользователям, хотя стоит
CAPTCHA: challenge "Math (hidden)" enabled
Так надо?
- Для комментирования войдите или зарегистрируйтесь
мож яваскрипт отключен у пользователя?
на сайте другие скрипты работают?
- Для комментирования войдите или зарегистрируйтесь
все другие скрипты работают
проверял на себе (у меня есть отдельный акканут обычного пользователя)
может быть конечно из-за того, что я перенес подключение ява-скриптов вниз, к закрывающему тэгу body (у меня не работают также и аякс комментарии)
попробую с другой темой
- Для комментирования войдите или зарегистрируйтесь
а зачем переносил вниз?
- Для комментирования войдите или зарегистрируйтесь
дык скорость загрузки страниц повышается (для пользователя)
ведь большая часть скриптов не нужна сразу, логично их перенести вниз (по этим же причинам - ускорение загрузки - вниз размещают скрипты гугл-аналитикс)
проверил на другой теме, да, видимо все таки зависит от расположения
проверил так, при добавлении материлов - тема сайта меняется на RootCandy (проверял под обычным пользователем) и капчу не видно (хотя она есть) а внизу формы для коментариев - где моя тема - капчу видно и сама она не решается
- Для комментирования войдите или зарегистрируйтесь
может тебе попробовать WEB Optimizator? он это делает, у него может лучше получится =) а там посмотришь результат, что и куда он воткнул и можешь сам потом сделать.
http://webo.in/articles/all/2009/05-drupal-performance/
- Для комментирования войдите или зарегистрируйтесь
не, пока не пробовал именно оптимизатор
но как раз оттуда
Правило шестое: располагаем JS в конце страницы
я и переносил
- Для комментирования войдите или зарегистрируйтесь
Есть разница между располаганием ненужных скриптов внизу и располаганием JQuery тоже внизу. Делая так, вы ломаете все инлайн-срипты на странице. Поэтому и не работает.
- Для комментирования войдите или зарегистрируйтесь
Дык, как я объясню друпалу - во те, нужные, а вот те - не нужные, если у меня вообще включено сжатие скриптов
Наверно таки придется вертать взад
- Для комментирования войдите или зарегистрируйтесь
посмотри исходники
jsalter или
jsregistry
думаю там должен быть ответ :)
- Для комментирования войдите или зарегистрируйтесь
Ок, подумаю
Пока отключу для комментариев капчу.
- Для комментирования войдите или зарегистрируйтесь
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); ?>
- Для комментирования войдите или зарегистрируйтесь
Спасибо
- Для комментирования войдите или зарегистрируйтесь
скрытая капча не работает с CAPTCHA 2.1 =(
- Для комментирования войдите или зарегистрируйтесь
скрытая капча не работает с 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);
Правил методом тыка. Сообщите — работает ли…
- Для комментирования войдите или зарегистрируйтесь
работает :)
- Для комментирования войдите или зарегистрируйтесь
Выпустил версию для Image капчи. Из новых фичей — теперь решение капчи не лежит в коде страницы плеинтекстом. Ссылка для скачивания.
Странно, поставил captcha, image_captcha, настроил - все нормально.
После включения hidden_image_captcha перестала открываться страница admin/user/captcha
а на страничке с формой обратной сязи (contact) каптча видна.
- Для комментирования войдите или зарегистрируйтесь
У меня 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 к имени метода. Работает.
- Для комментирования войдите или зарегистрируйтесь
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
Подскажите, пожалуйста, что можно сделать, чтобы все работало?
- Для комментирования войдите или зарегистрируйтесь
Сведения об ошибке на веб-странице
Агент пользователя: 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
- Для комментирования войдите или зарегистрируйтесь
В 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);
?>- Для комментирования войдите или зарегистрируйтесь
А на 7-ку модуль будет портирован? Такая штука полезная, а в 7-ке приходится мириться с обычной катчей...
- Для комментирования войдите или зарегистрируйтесь
















Комментарии