Комментарии 23
ну, принципе, это всё делает смысл.
только вот я не думаю что толку будет больше, чем в способе, на который вы ссылаетесь.
только вот я не думаю что толку будет больше, чем в способе, на который вы ссылаетесь.
Очень важная деталь, упущенная в том способе - это анализ видимых полей ботом. Когда бот имеет одну страницу, это сделать просто. Когда боту надо сопоставить со страницей еще и стиль из внешнего источника - это сильно усложняет ему жизнь.
ну тогда ваш способ стоит водить только после того как предыдущий перестанет давать приемлемый результат (боты поумнеют)
Нифига это боту не усложняет задачу. Пропарсит css и html и запостит, что хочет. Зато бедному пользователю каждый раз лишние css грузить…
Для того чтобы бот что-то сделал, его надо этому научить. А для этого необходимо как минимум самому врубиться, отчего происходит отсечка. Если вы откроете исходник страницы, построенной с помощью этого алгоритма, вы увидите НОРМАЛЬНУЮ форму, не вызывающую подозрений. Если посмотреть исходник формы, описанной в посте по ссылке, все станет понятно сразу. Главное отличие - сложность выдвижения гиппотезы отсечки.
Ну а если рассматривать сложность создания бота после того, как алгоритм раскусили, обходить этот способ сложнее не на много.
Ну а если рассматривать сложность создания бота после того, как алгоритм раскусили, обходить этот способ сложнее не на много.
Как все сложно!
мне понравился вариант, когда идет к примеру 5 рисунков. на 4 из них изображены домашние животные, на пятом - дикие. ну и соответственно вопрос задается, на каком из рисунков дикое животное. чтоб усложнить жизнь ботмейкеру, можно на одну комбинацию рисунков добавлять несколько вопросов, менять местами слова, накладывать эффекты на изображения, некоторые изображения вообще рандомно генерировать, вообщем нмного чего можно придумать.
А зачем ещё и каптча здесь? По сути боту нужно либо только каптчу распознать, либо только заполнить правильное поле (поле, думаю, легче определить).
Мне кажется это усложнит жизнь больше владельцу ресурса, чем спамеру.
И ещё что будет с пользователем без CSS? У него ведь будут помимо каптчи видны все остальные фейковые поля. Он же в них тоже что-то начнет писать.
Мне кажется это усложнит жизнь больше владельцу ресурса, чем спамеру.
И ещё что будет с пользователем без CSS? У него ведь будут помимо каптчи видны все остальные фейковые поля. Он же в них тоже что-то начнет писать.
Все же описано в посте:
1. Каптча нужна для юзеров, у которых отключен CSS или по каким-то причинам не был загружен.
2. Бот полюбому должен заполнить правильное поле. Правильное поле при наличии каптчи - это отображенное поле. Если CSS был принят - это другое поле. При этом все остальные не должны изменить значения (об этом, кстати, написано в ref-статье)
3. Если у пользователя не загрузилась CSS, будет отображена каптча и только одно поле, у которого не прописан тип hidden (см спеки html)
1. Каптча нужна для юзеров, у которых отключен CSS или по каким-то причинам не был загружен.
2. Бот полюбому должен заполнить правильное поле. Правильное поле при наличии каптчи - это отображенное поле. Если CSS был принят - это другое поле. При этом все остальные не должны изменить значения (об этом, кстати, написано в ref-статье)
3. Если у пользователя не загрузилась CSS, будет отображена каптча и только одно поле, у которого не прописан тип hidden (см спеки html)
Что-то в последние дни уж эта тема больно популярна. А меж тем, не стоит изобретать велосипед. Почитайте про honeypots. Это уже всё давно есть и используется. Как говорится, всё уже придумано до нас :)
Суть приёма honeypot (какое официальное название этой технологии на русском не знаю, но honeypot означает «горшочек с мёдом», или попросту приманка) заключается в том, чтобы вынудить бот выполнил действие, которое обычные пользователи не выполняют, проглотить приманку. Как в примере здесь — заполнил невидимое поле. Очевидно, что нормальный пользователь не будет заполнять невидимые поля.
С равным успехом можно втыкать и невидимые формы, заполнение которых однозначно будет идентифицировать ботов, с «вкусными» названиями полей, типа name, email, post, www.
Однако, это не панацея. На самом деле, при прицельной атаке на сайт это давольно таки просто решается — анализом нужных участков html и css. Так что это эффективно только на относительно непопулярных сайтах. В таком случае спасёт разве что трёхмерная капча или капча с распознаванием образов :)
Вот статейка, которой уже больше года, кажется именно в ней была впервые подробно описана эта технология. Есть и более поздние, с примерами. А вообще, гугл немало таких статей находит.
Суть приёма honeypot (какое официальное название этой технологии на русском не знаю, но honeypot означает «горшочек с мёдом», или попросту приманка) заключается в том, чтобы вынудить бот выполнил действие, которое обычные пользователи не выполняют, проглотить приманку. Как в примере здесь — заполнил невидимое поле. Очевидно, что нормальный пользователь не будет заполнять невидимые поля.
С равным успехом можно втыкать и невидимые формы, заполнение которых однозначно будет идентифицировать ботов, с «вкусными» названиями полей, типа name, email, post, www.
Однако, это не панацея. На самом деле, при прицельной атаке на сайт это давольно таки просто решается — анализом нужных участков html и css. Так что это эффективно только на относительно непопулярных сайтах. В таком случае спасёт разве что трёхмерная капча или капча с распознаванием образов :)
Вот статейка, которой уже больше года, кажется именно в ней была впервые подробно описана эта технология. Есть и более поздние, с примерами. А вообще, гугл немало таких статей находит.
Как то все забыли про js. Если соорудить 20 функций, которые работают с одинаковыми наборами входных данных, при этом результат выполнения однозначно определяется этими данными (т.е. не рандом), то можно динамически делать генератор "правильных" полей, комбинируя эти функции. Если использовать eval, выполнение функции в контексте другого обьекта и другими трюками js, то ботам придется обзавестись полноценным движком.
вот еще вариант. при подготовке страницы генерим уникальный ключ, он будет соответстовать url'у, который принимает post/get данные. естестввенно, в таком случае понадобится mod_rewrite. пишем ключ в сессию. далее генерим javascript, который будет указывать action у формы, в соответствии со сгененрированным ключом. если у пользователя отключен javascript, то предлагаем ему ввести уже обычную капчу. чтоб бот не парсил javasсript, можно каждый раз генерировать скрипт по разному.
Пользователя от бота отличает еще и сам процесс набора текста и те события, которые при этом наступают в браузере. При этом для отсеивания ботов не нужно пользователя утруждать лишними действиями - он просто делает то, что ему нужно - заполняет форму.
Реализовать это можно, на мой взгляд так: мы к каждому элементу формы добавляем обработчик события, например onKeyDown. Когда это событие наступает, мы добавляем символ, соответсвующий нажатой клавише, к строковой переменной JavaScript и тут же сверяем обновленное значение переменной с текущим значением в поле. Такая сверка позволит исключить ситуацию, если бот все-таки "догадается" проанализировать функцию, которая должна выполняться по этому событию, и выполнить необходимые действия.
P.S. Если JavaScript отключен, то выдаем стандартную стойкую "каптчу".
Жду ваших возражений и способов обхода этого алгоритма ботом (как сэмулировать нажатие клавиши?). Если же алгоритм можно обойти, можно подумать над его усложнением, чтобы увеличить затраты на обучения бота.
Реализовать это можно, на мой взгляд так: мы к каждому элементу формы добавляем обработчик события, например onKeyDown. Когда это событие наступает, мы добавляем символ, соответсвующий нажатой клавише, к строковой переменной JavaScript и тут же сверяем обновленное значение переменной с текущим значением в поле. Такая сверка позволит исключить ситуацию, если бот все-таки "догадается" проанализировать функцию, которая должна выполняться по этому событию, и выполнить необходимые действия.
P.S. Если JavaScript отключен, то выдаем стандартную стойкую "каптчу".
Жду ваших возражений и способов обхода этого алгоритма ботом (как сэмулировать нажатие клавиши?). Если же алгоритм можно обойти, можно подумать над его усложнением, чтобы увеличить затраты на обучения бота.
Пользователь ведь может значение в форму вставить и из буфера обмена (в т.ч. и мышью через контекстное меню, и из браузерного меню-автокомплита. С учетом этого, сверка переменной со значением поля не представляется возможной.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Uncaptcha