Pull to refresh

Comments 82

Очень хорошая идея! Хотя такую защиту можно обойти, но, имхо, для небольших проектов можно отменить каптчу и юзать этот способ :)
Это не каптча. Тест Тьюринга, но не каптча.
"CAPTCHA" is an acronym for "Completely Automated Public Turing test to tell Computers and Humans Apart"
Тест Тьюринга? Да. С целью разделить людей и ботов? Да. Автоматизированный? Да. Публичный? Да.
Об этой идее читал заметку более двух лет назад :(
Идея в наше время устарела и не работает.
Сколько ВАМ потребуется времени, чтобы определить стандартные скрытые поля/формы и подправить робота? Мне чтобы обойти такую "хитрость" нужно минуты 2-3 :) Были более жизнеспособные идеи с динамическим CSS связанным с сессиями, т.е. поля видимы в зависимости от параметров времени/чего-нибудь еще, но это обходится минут за 20. Так что увы лучше капчи ничего не придумали. Самое простое решение: поставить уникальную капчу, какой ни у кого нет :)
Могу сказать что вы ошибаетесь. Идея хорошая и рабочая, а если эти поля и имена полей добавляются/генерятся рандомом и в разные места, за сколько минут Вы это обойдете?
А если запретить боту заполнять все поля, у которых видимость "hidden"? Ведь это не очень сложно.
Можно прятать это поле динамически из JS уже после загрузки страницы. :) А для тех пользователей, у которых JS отключен, добавить к полю комментарий «если вы не бот — не пишите ничего в это поле». :)
Ммм... заставить бота выполнить JS? :D

Я верю в ИИ ))
Мне кажется, дешевле гастарбайтеров нанять, чтобы они спамили. :))
Сногсшибательная идея!
Не дешевле. Дешевле сборщику гостевух загружать документ в IWebBrowser2 и смотреть применённые к формам стили.
Да, конечно не сложно. Также не сложно написать программу чтобы кто-то вводил цифры в форму.

Сама идея все-таки рабочая, капчу тоже можна порефрешить и посмотреть на фон етк. и ответ был на фразу: "Идея в наше время устарела и не работает".

тх.
надо CSS бота научить парсить
Совсем несложно. Просто человек, который разрабатывает такого бота, скорее всего, следит за новинками ботоборцев :) и любую мало-мальски распространившуюся технологию борьбы с ботами шустренько обрабатывает, выпуская новую версию. В результате эту идею ждет выход в тираж и неактуальность.
А жаль, конечно, идейка красивая, я такой не встречал еще.
Зачем боту заполнять все поля? Если вас спамят то, либо вы очень популярны, либо у вас стандартный скрипт. И там и там есть строгий набор полей которые и заполняет робот.
Мне только один раз пришлось столкнуться с ботами, и судя по нашему противостоянию, некий человек ими все таки управлял, потому что как я ни ставил защиту, через несколько дней они начинали её обходить.
если мне не изменяет память, вы не первооткрыватель этого способа. да и долго он не продержится. ведь нетрудно скриптом получить все свойства объекта и дописать туда условаие, если он скрыт, не заполнять его.
об этом писали уже и на хабре и на многих десятках других сайтов. не надо заниматься копипастом.

этот вариант не панацея от ботов
Есть еще вариант. Заполнить скрытую форму жаваскриптом чем-нить уникальным, хоть номером сессии.
Браузер заполнит, а бот - нет.
Вообще это поможет от ботов которые спамят во все подряд, если поставлена цель заспамить только один сайт, не поможет ничего =(
что мешает боту отрендерить для себя страницу, или хотя б просто выяснить, видимы ли поля и их позиции, и заполнять?
теоретически все можно, но если кому нужно писать бота ради одного сайта, того не сдержишь никакой защитой, а бот, который постит во все подряд, работает с набором движков(форумов, гестбуков, блогов) и любая кастомизация движка приводит его в замешательство
боту придется скачивать подключенный css файл и парсить его. и только потом он сможет сделать вывод скрыто поле или нет
Использую похожий, но даже более простой метод с style="display:none", уже несколько месяцев на своем сайте, за это время отмечено два спамерских сообщения (когда начинал использовать были десятки в день), что конечно лучше чем заставлять пользователей разгадывать ребусы.

На определенном уровне развития сайта, пока его не спамят целенаправленно, эта техника и ее модификации могут отлично работать, по крайней мере до тех пор пока не появиться достаточно количество адаптированных под нее ботов.
Если кому интересно... Мне вроде удалось избавиться от спама, для этого я использую 3 способа:
1. Как обычно, стоит капча. Капча проверяет referer, и если он отличается от оригинального сайта - не выводит символы. Это своеобразная защита от размещения ее на чужом сайте и использования посетителей для заполнения. Соответственно ограничен срок жизни изображения капчи и есть привязка к IP.
2. Стоит ява-скрипт, считающий нажатия клавиш в форме. Далее форма парсится на сервере, проверяется процент от количества нажатий и количества символов. Если он меньше определенного порога - спам. Получилась зашита от копипаста. Даже кто спамит сообщения вручную как раз и использует копипаст.
3. Проверка по ключевым словам.
А зачем такие навороты? У Вас такой популярный сайт? Помоему если будет желание, то и реферер подделают, и яваскрипт. Проверка по словам вообще мало помогает :(.
Дело не в популярности, по 3-5 сообщений в неделю было. К тому же вводили символы с капчи "ручками".

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

Я не стал упоминать о том, что засветившийся в спаме ip блокируется на определенный срок - таким образом закрываются анонимные прокси.
Как быть с людьми без ява скрипт?
А такие еще остались? :)
Они, к сожалению, даже капчи не увидят :(
Но такое в наше время - редкость.
Если ваш ресурс не такой популярный, кто будет заморачиваться созданием таких порносайтов для спама? Да и кто мешает выдавать капчу юзеру не напрямую с сайта-жертвы, а с бота? Потом этот же бот получает ответ от пользователя и вводит его на сайте-жертве, уже с поддельным реферером, само собой. Имхо, вполне достаточным ограничением может быть время действия капчи. Да и то, если ботовладельцы посчитают, что спамминг вашего ресурса окупает затраты на обход такой защиты.

IP блок тоже пробовал, помогает слабо, проксиков дофига. Тогда надо их заранее из инета брать. А анонимные уже ручками вбивать.
При чем сдесь популярность? Мне что, трудно проверку реферера в скрипте прописать? Или я эту проверку должен закомментировать?

Можно конечно и скриптом, но после первого такого спама ip сайта появится в постоянном черном списке. Что вы ему посоветуете? IP поменять?

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

Насчет ip сайта - я ему посоветую поменять проксю.
Никто не мешает скачать ваше изображение по протоколу HTTP с любыми заголовками (в т.ч. с нужным referer) и показать его на другом сайте.
Для этого нужно полноценный веб браузер писать, а мне все обошлось в 2 строчки кода на Перле.

ИМХО, чем писать скрипты, пусть даже для мегапопулярного портала, не проще ли спамить ссылки на более доступных сайтах? Тем более что обузоустойчивость заспамленного сайта может в любой момент подвести.
Не нужно писать никакой браузер. Надо взять скачать себе картинку. Например, в Perl можно использовать модуль LWP, в PHP - curl и так далее. Тогда и о cookie не надо будет беспокоиться самостоятельно.
Так для отправки сообщения нужно тоже реферер подделать и ip чтобы соответствовал. Если капчу грабит сервер, то соответственно и сервер должен отправлять данные на сайт.
Есть два сервера: ваш и спамера.
1. Сервер спамера забирает через HTTP капчу в вашего сервера и отображает клиенту как свою
2. Клиент вводит символы с капчи отправляет серверу спамера
3. Север спамера отправляет клиенту страницу
4. Сервер спамера отправляет вашему серверу куки, реферрер, капчу и спам.
Проще заспамить на более доступных ресурсах, чем писать скрипты самому.

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

Во вторых, после таких действий вы можете лишиться хостинга, т.к. такие действия повсеместно запрещены.
> После нескольких сообщений, адреса в которых указывали на всевозможные эксплоиты, ссылки автоматически преобразуются в графику.

То есть ссылки в комментариях не кликабельны и не копируются в буфер обмена? Значит, если я оставлю ссылку на URL типа как на youtube (http://www.youtube.com/watch?v=UI8oQZgGWlY), то другие долны вводить весь этот UI8oQZgGWlY руками себе в браузер?

Можно лишиться обычного shared хостинга. А можно взять абузоустойчивый хостинг. А можно взять dedicated сервер где-то на островах.
Да, ссылки не кликабельны, так же как и email.

Во первых кто эти другие, если комментарии бращены мне? Во вторых, появление такого адреса маловероятно. В третьих, если кому нужно - введут...
Сервер, скрипт... Да и не проще ли заспамить вручную :)
после того, как хабр пару раз зохавал мои сообщения или отказался их принимать по причинческим технинам, я набираю особо длинные каменты в блокноте, эклипсе, ворде или в соседней вкладке в google(mail,docs etc. что в данный момент под рукой) и вставляю в форму. так что пункт номер два отобъёт всё охоту писать на сайт :)
Дело не в конкретном поле формы - сама идея интересна.

Особо длинные не удастся - стоит ограничение... пока с этим проблем не было, в принципе такую защиту можно поставить на поле капчи. Ее то копипастом никто не вводит.
Я делаю Ctrl-A, Ctrl-C :)
Notepad надёжнее - FF может умереть просто во время набора :)
У меня Opera, она не умирает :)
я не использую Оперу, а то бы умирала и она
буфер обмена не отомрет же, так что Ctrl+C хорошо сохраняет от потери, а если еще в добавок использовать программу, которая делает коллекции из буфера обмена, тогда не нужно будет заботиться о том, что в буфере уже было что-то важное...
Дарова, Тавридер!
я имел ввиду, что FF может умереть ещё до того, как я успею скопировать текст. Не копировать же после каждого слова :)
Привет-привет. Только уж давно как не тавридер ;)
Почему бы и не копировать ;) Хук на клавиатуру и обработчик фраз с сохранением коллекции. Главное руки приложить и голову ;)
вот про учёт нажатых клавиш это инетресно - в принципе если за дело возьмётся человек, то он озадачится конечно, но всё-же решит проблему, после чего бот может быть пропатчен, однако ж может сработать - для конкретного сайта, какое-то время
Учет нажатий клавиш - не для бота, а для человека! Меня боты уже давно не волнуют, мне бы от людей полноценно защититься.

Самый лучший вариант защиты спама (того что делают вручную) - делать ссылку нечитаемой для поисковиков (с помошью явы или еще чего), ну и соответственно это должно быть заявлено, чтобы спамер знал.
Тут как в спамассассине надо бы несколько методов применять и ставить баллы :)
Идеального способа, который бы действовал всегда, очевидно, нет. Ваш способ хорош, и некоторое время он будет работать, но потом роботы научатся его обходить (если кому-нибудь очень захочется постить спам на ваш сайт, или если Ваш способ распространится). Тогда способ придётся изменить, вероятно, даже изменить не очень сильно. И цикл начнётся по новой.

Период действия цикла определить сложно, это зависит от многих факторов. Вероятно, придётся немного изменять алгоритм каждые два-три месяца. Можно даже заранее продумать изменение алгоритма на год вперёд с автоматическим переключением. Через год, вероятно, придётся искать другой алгоритм.

А использовать можно что угодно - css, вопросы "сколько будет 3 плюс пять" или "как зовут автора сайта", изменение названия полей в форме. Главное - время от времени обновлять проверки, потому что, как я говорил, идеального решения нет.
Странно, что Яндекс не предложит решение. Антиспам у них есть, надо немного изменить механизм работы программы и вуаля получите... или выполнить в виде сервиса, думаю, на этом тоже можно заработать.
Если каждый придумывает себе защиту от ботов, то ботов не будет. а если она, защита, становится популярной, то ее обходят, и боты будут. Вот такая простая мысль.
сделайте регистрацию платной - через смс, телефонный звонок и т.п. и спамеров не будет :)
а решение Д. Котерова для валидации форм в купе с этим скрытым полем не подойдет?
я сам не пробовал, но по идее это должно хорошо работать.
Что за решение если не секрет?
UFO just landed and posted this here
всё это - защита от самого себя.

мне даже не интересно обсуждать все эти приемы, которые не стоят выеденного яйца потому, что как только спамер захочет заспамить ваш сайт, он в ближайшие 5 минут всё это разузнает, а через 10 минут будет готов скрипт (конечно бот может выполнять JavaScript!), который сведет все ваши хитрости на нет.
интересно найти реальное лекарство от всех болезней, предлагаю всем хорошенько подумать и провести продуктивную мозговую атаку..)

тут где-то был пост с отловом количества нажатых клавиш. вот это уже ближе к делу. однако для скрипта не составить никакого труда сэмулировать нажатие клавиш юзером, только если.. если он сможет выполнять скрипты. а скрипты он может выполнять везеде, где это разрешает политика безопасности. (попробуйте ввести в адресной строке браузера javascript:setInterval(function(){alert('ещё спам!')},1000);void(0);
отсюда решение - разместить поле в iframe, расположенном на другом хосте, где исполнение скриптов запрещено. только лучше это сделать не полем, а просто объектом, на который юзера просят навести мышку, а потом отправлять её координаты серверному скрипту, который сохранит true в БД, чтобы потом проверяющий скрипт читал бы уже из базы данных - навел ли юзер мышь или нет.
вот в эту сторону надо копать. хотя всегда остается вероятность, что злоумышленник обойдет политику безопасности браузера (или напишет свой браузер :))
Думал уже над этим. Использование политик безопасности действительно неактуально, т.к. отключается в том же FF (напрямую в коде, если необходимо), а потом этот же FF поднимается через RemoteControll.
Тут скорее надо смотреть на то "человечность" пользователей и т.д.
Ссылку на мои рассуждения по поводу "идеальной" защиты, уже кто-то вроде оставлял, но напишу еще раз http://korchasa.blogspot.com/2007/06/blo…
а зачем эмулировать нажатия клавишь? достаточно передать в нужном поле "нужное" количество знаков.
речь идет не о лекарстве от любого спама - речь идет о лекарстве от брут-спама, когда индивидуальная настройка бота не целесообразна.
мне интересен именно поиск универсального решения.. разработки тулкита для простой работы с идентификацией юзера...
Извините, но в русском языке не может быть «борьбы используя», есть «борьба с использованием» или «при помощи».
Возможно. Просто так по-русски не говорят.
Возможно.Русский не самая сильна моя сторона.
так исправьте заголовок..
расчет на авось. как техника защиты не состоятельна.
защита не стопроцентная конечно, ибо робота можно написать почти любого. Только в том случае если на сайте требуются ещё какие-то действия от пользователя дабы подтвердить его humanity - вот тут можно уже говорить о серьёзной защите.

Ваш же способ легко превратить из "совсем-легкий-для-подделки" в достаточно сложный. Например


<form id="our_super_form">
<input id="protected_1" type="text" name="login_123456" />
<input id="protected_2" type="text" name="login_654321" />
... (скажем десяток таких)



после загрузки страницы идём яваскриптом и убираем все инпуты кроме одного. Оставляем лишь тот login_XXXXXX который в данном конкретном случае будет работоспособным.

Для того чтобы обойти такой способ понадобится единственное - интерпретировать код JS роботу. Это опять-таки не сложно, хоть и требует уже некоторых усилий.

Ещё хинт: флеш сейчас есть почти у всех. Во флеше есть ActiveScript. Флеш может общаться с js в обоих направлениях. Флеш ещё и с сервером может общаться без ведома JS. А вот разламывать флеш каждый раз в рантайме - уже очень сложная задача. Правда заставлять всех пользователей ставить флеш - не совсем корректно. Но по крайней мере при регистрации если человек прошёл её с флешем - можно быть уверенным что это не робот. И сделать соответствующую пометку в БД пользователей.

Можно использовать флеш и для показа captcha-картинок. Разве что флешку придётся генерировать рантаймом на сервере. Ибо передавать код параметром - конечно же, абсурд. Генерировать флеш не сложно. Главное заставить его внутри не использовать шрифтов. Рисовать всё линиями. Делать скриншот флешки роботу - нереально. Выполнить флешку обеспечив её связью с фиктивным браузером с JS - совсем уже нереально.

Это может быть достаточно серьёзной защитой. Но опять же - не стопроцентной. Стопроцентная защита - а) деньги, б) пасспорт. :-D
ой. голова не работает

в случае с инпутами - конечно же можно просто яваскриптом поменять name у одного инпута, нет смысла генерировать их кучу :). Хотя все же - яваскриптом можно сначала сгенерировать кучу css стилей типа style_SJHGSDHG и чтобы только у одного было visibility: не hidden :-).
На сколько я знаю есть PHP библиотека для рисования .swf так что это будет еще проще.
только одно замечание,способ не мой)
если робот выполнен на основе «живого» браузера, то можно и снимок флешки сделать; правда неизвестно будет ли этим кто заниматься если сайт недостаточно значим для спама :)

пометить человека прошедшего регистрацию с флешом как неробота идея разумная, но ведь безфлешных пользователей мы же не будем отсекать, верно? для них будут стандартные каптчи .. через которые пролезет и бот (хотя некоторый уровень сложности может Их и остановить на определённом сайте)
Sign up to leave a comment.

Articles