Представляю вашему вниманию свой мини-модуль "Скрытая капча". Фишка этого модуля в том, что поле для ввода капчи является скрытым и заполняется джаваскриптом автоматически. Т.е. пользователь вообще не догадывается о наличии капчи на форме. По сути, это та самая элементарная джава-скриптовая капча против спамботов, о которой каждый хоть раз задумывался. Для пользователей без джаваскрипта отображается стандартная капча.
Плюс: можно сказать "прощай" уродливой друпаловской капче и процессу капчезаполенния вообще. Как следствие - довольные юзера.
Минус: от нацеленной спам-атаки модуль не спасет (а что спасет?)
Для тех, кому интересно как он работает
Данный модуль основан на стандартной мат. капче с небольшой модификацией.
Кусок модуля:
$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') ,
);
//....
Этот суффикс вставляет джаваскрипт, который и скрывает форму, а потом заполняет поле.
Этот прием можно применить не только к мат. капче, но тут дело уже за вами, дерзайте
Качать здесь: Модуль Скрытая капча
Вложение | Размер |
---|---|
hidden_captcha.zip | 1.37 КБ |
Комментарии
спасибо.
Что-то у меня большие сомнения по поводу безопасности такого приёма.
Кстати, то же самое можно сделать иначе - просто в форму встраивается скрытое поле, которое JS заполняет. Сервер получает форму - если поле заполнено (у клиенты есть JS), то считаем его человеком, если не заполнено - бот.
Тоже спорный метод, но очень похож на ваш. Где читал об этом не вспомню - может быть и модуль такой уже есть для Друпала...
В этом обзоре я кажется упоминал такой способ:
Ломаем captcha. Тестовое погружение в тему.
Повторюсь, что способ не спасет от преднамеренной заточки бота под сайт. Но если этого не будет (99% случаев), то спасет от случайного спама и облегчит жизнь юзерам. Данное решение считаю самым простым и эффективным, потому что писать вообще ничего не надо, а вставлять можно куда только подставляет модуль CAPTCHA
Это дополнение к капче или отдельный модуль?
Некоторые спам-боты ходят по сайтам браузером. То ди от кривости рук авторов, то ли потому что броузер выполняет скрипты и грузит катринки.
Это дополнение к капче. По сути - та же мат.капча, только с бонусом.
Бывает ходят. Но это из ряда заточки под сайт.
Обновил пример и модуль. Оказывается под Safari джейквери совсем не хочет исполнять функцию hide(). Заменил на установку видимости через CSS:
Видел сайтец где людям дают по центу чтоли за то что они вводят числа и текст с картинки ;). я так понял им их спам бот дает - а люди вводят. Вот такой вот оригинальный подход к обходу капчи...
Ещё проще метод - спам бот считывает картинку с сайта и показывает её человеку, который хочет посмотреть порнографию. Он вводит - ему показывают то, что он хотел - все довольны и спам продолжает умножаться...
Спасибо, использовал здесь: http://fastctroi.ru ,все замечательно работает.
Правда сайт еще пуст.
Мне товарищ недавно сделал скрытую капчу, видимо этим модулем, после чего появление спама прекратилось.
Обновил модуль, пофиксив баг с несколькими формами на одной странице.
Хочу так же заметить, что если чуть чуть поменять info файл, а имено
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
// 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
Вроде бы…
hidden_image_captcha/hidden_image_captcha.module, строка 7:
заменить на:
list($font, $errmsg, $errvar) = _image_captcha_check_fonts($fonts);
Правил методом тыка. Сообщите — работает ли…
работает
Странно, поставил captcha, image_captcha, настроил - все нормально.
После включения hidden_image_captcha перестала открываться страница admin/user/captcha
а на страничке с формой обратной сязи (contact) каптча видна.
У меня admin/user/captcha доступна, однако на странице contact имидж_капча торчит, подтверждаю.
Как я понял, это безобразие случается, когда на одной странице несколько форм с капчей и, соответственно, несколько раз вызывается behavior с именем hidden_captcha.
Удалось исправить. hidden_image_captcha.module, строка 21:
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>';
Заменить на:
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-ке приходится мириться с обычной катчей...
Ссылки на модуль изменились.
Страница на shvetsgroup.com: http://shvetsgroup.com/node/85
Прямые ссылки:
http://shvetsgroup.com/files/hidden_captcha-6.x-1.2.zip
http://shvetsgroup.com/files/hidden_image_captcha.zip