Такая тема уже [#14403]была[/#] на форуме, однако решение проблемы там так не обнародовали. Начну с самого начала, ибо не знаю даже как подступиться к проблеме.
Делаю сайт, в котором пользователи могут посмотреть условие задачи и ответ к ней. Я хочу защитить ответы к задачам от роботов, чтобы мою базу ответов никто не перекачал за считанные минуты. Думал сделать это с помощью капчи: т.е. пользователь читает условие задачи, а если хочет посмотреть ответ к ней, набирает текст с картинки, нажимает кнопку и получает ответ. В связи с этим у меня к вам уважаемые два вопроса:
1) Стоит ли вообще защищать информацию с помощью капчи, ведь она, предназначена для того чтобы робот не отправлял спам? Может есть какое-то другое решение?
2) Если все-таки использовать капчу, как ее прикрутить к тексту задачи, чтобы реализовывался описанный выше алгоритм? Капчу легко прикрутить к форме, а как присобачить к ноде (тексту) ума не приложу.
Комментарии
Кому надо скачать вашу базу ответов - скачает и с капчей
«Кому надо скачать вашу базу ответов - скачает и с капчей»
Тоже думал об этом, однако, может помочь от школьников.
Правильные ответы на ваши задачи та же капча.
Робот точно не ответит на абстрактные вопросы)
Если это не селект банальный будет
блокировка по ip при внешнем парсинге с вводом совершенно нестандартных капч может реально усложнить жизнь школьникам. Если еще отлавливать ip от прокси и впн (они один фиг все стандартные) - то можно в тупик поставить даже профессионалов.
зы
по моему мнению, пока есть возможность - живым людям лучше капчу не показывать.
Подгружай ответы аяксом.
Поставил модуль Field Value Loader, который подгружает CCK поле с ответом по запросу пользователя. Означает ли это, что робот (обычный, не сильно крутой робот) не сможет узнать ответ? Извините, если вопрос слишком глупый, не разбираюсь я в этом совсем. Это такая же защита что и с капчей или хуже/лучше? Если это вообще не защищает мои ответы, можно ли сделать так, чтобы погрузка данных осуществлялась после заполнения капчи?
Это защитит от большинства роботов
Благодарю за ответ. Однако порыл я интернет немного, и выяснилось, что все-таки есть программы-парсеры в свободном доступе, которые позволяют нажимать ссылки/кнопки, подгружающие данные и даже прокручивать страницу. Думаю все-таки капча будет надежней, во всяком случае попробую ее поставить вначале, удалить всегда успею.
Вот придумал один из возможных путей решения моей проблемы. Хотел бы услышать критику.
Суть такова. Подключаю модуль Webform. В каждой задаче (ноде) создаю одно поле Webform (с каким-нибудь произвольным вопросом, на который не обязательно отвечать) и кнопкой "отправить". На кнопку повесить капчу. Когда пользователь ввел капчу и нажал кнопку его перебрасывает на страницу в которой обычно пишут что-то типа "ваше сообщение отправлено". А я решил в это сообщение вписать ответ к задаче.
Проблема в этом способе состоит в том, что капча привязывается к конкретной вебформе, а вебформа привязана к ноде. Таким образом у меня на сайте будет стоклько капчей, сколько и задач. А их у меня тысячи! Я очень опасаюсь что это негативно отразится на производительности сайта. На рисунке во вложении показаны три капчи к трем вебформам. А если их будет пять тысяч, что думаете?
Почему бы не написать кастомную форму, которую можно вывести блоком вместе с типом контента, прицепить к ней капчу а при сабмите проверять текущую ноду (функция arg()) и доставать ответы, например, с поля той же самой ноды?
В результате меньше телодвижений при создании "задачи"
Спасибо, я как раз к этому и пришел. Но вот вопрос: можно ли создать форму средствами HTML и подцепить к ней капчу? Я сделал форму с кнопкой, но чтобы поставить на эту кнопку капчу, нужен id формы. Его можно получить только у кастомных форм? Не хочется разбираться созданием своих форм.
Ааааа... получилось!!! Я готов танцевать, три дня бился, уже было сдаваться начал.
Напишу как я сделал, может кому пригодиться. Ни строчки кода, как и хотел.
Задача: скрыть часть текста и показывать ее только при заполнении капчи.
Решение: Создаем ноду. Делим текст (в моем случае это была задача) на две части - первую записываем в тело ноды, а вторую в CCK поле (для моего случая хватило обычной строки, если текста много можно использовать другое много строчное поле). Далее, создаем другую ноду (я ее создал в другом типе содержимого, хотя это не обязательно), в которую запихиваем вебформу. Эта вебформа нам нужна только ради айдишника этой формы который надо будет вставить в капчу. В настройках вебформы создаем скрытое поле, которое не будет видно пользователю (нам ведь ничего заполнять не нужно, только кнопка). К этой кнопке подключаем капчу,
Итак, у нас есть две ноды, во второй вебформа с заветной кнопкой и капчей. Размещаем обе ноды на одной странице, адрес которой совпадает с адресом первой ноды (той, которая без кнопки). В настройках вебформы можно указать адрес страницы, на которую нас будет перекидывать после нажатия на кнопку. Ставим %server[REQUEST_URI]/любоеслово. Таким образом, после заполнения капчи и нажатии на кнопку, нас будет перекидывать по адресу, содержащему айдишник первой ноды. А дальше вьюсом на этой новой странице выписываем поле CCK, в котором мы храним скрытую информацию.
Этот способ не подходит, если вы хотите вывести скрытую информацию непременно на той же странице. Но, в моем случае это не принципиально.
P.S. спасибо всем, кто принимал участие
Все ответы,текст ответов выводить картинками и пусть парсеры сначала качают картинки потом пробуют распознать текст...
Есть программа Файн Ридер, которая решит эту проблему за несколько минут.
Кстати, я рано радовался. Весь мой план, описанный выше, можно обойти если попросту ввести в адресную строку нужный путь. Тогда не понадобится набирать капчу. На данный момент решения проблемы у меня нет, скорее всего придется обращаться к услугам профессионалов.