В этой статье я хотел бы попробовать дать анализ проблемы и способов ее решения и привести пример одного программистского метода, который я успешно использую уже много лет в своих проектах. Кроме того, мне хотелось бы сделать статью интересной для чтения самого широкого круга специалистов.
Последний предлагаемый метод спорный, но судите сами!
Метод переменных полей
Имеем простую форму с кнопкой типа submit.
Это самый простой, канонический вариант. Мы заполняем форму, нажимаем кнопку типа submit, и элементы формы передаются какому-то скрипту тем или иным методом для обработки.
Спаммер не напрягается с заполнением полей, а сразу, напрямую, вызывает нужный скрипт с нужными параметрами. В этом случае определить, человек нажал на кнопку, или скрипт вызван напрямую затруднительно.
Возможные методы борьбы
Нужно, чтобы имена полей в форме не имели смысловой нагрузки. Не имели названий "name", "last-name", "tel", "mail" и так далее. Роботизированные спаммерские скрипты ориентируются именно на это. По моему опыту наблюдения за спаммерскими роботами, они заполняют те поля, которые знают, как заполнить, а те поля, где затрудняются, оставляют пустыми, или вставляют козырную фразу «Antispam SUXXX». За долгие годы испытаний ни один робот не заполнил у меня в испытательной форме поле «ntspm». Другими словами, если сделать форму всего с одним важным, но непонятным для робота полем, например, вместо поля с именем «login» использовать имя «l__in_001», то это поле робот заполнить не сможет. По крайней мере вероятность этого довольно велика.
Можно пойти дальше и запрограммировать свои формы так, что названия полей будут меняться каждый день. Например, можно брать нормальное имя поля, например, «telephone», прибавлять к нему «отпечатки пальцев» в виде сегодняшнего числа, брать от получившейся строки md5-хэш, как самый производительный из хэшей, и использовать его в качестве имени поля за указанное число.
Программируется это все один раз, работает постоянно, и это реальный метод избавления от роботов.
Ну вот честно, поставив себя на место спаммера я не могу найти простой и быстрый способ побороть этот метод. Только вручную каждый день разбираться, какие нынче поля действуют и менять код робота.
Метод аяксовой кнопки
Простая форма. Все как в методе «переменных полей», но обрабатываемая аяксом. Кнопка, которая раньше была типа «submit», теперь у нас имеет тип «button». По нажатии на кнопку срабатывает скрипт JavaScript, который отсылает всю форму сразу, или отдельные поля этой формы на сервер.
В чем суть защиты? В том, что роботы не умеют закачивать и обрабатывать скрипты JavaScript. Роботы — звери серверные, а скрипты JavaScript — звери клиентские. Тут идет нестыковочка технологий. Звери наши живут в разных клетках. И этот метод не дал ни одной осечки на моем сайте статей. Он прекрасно работал и работает до сих пор. Но есть нюанс.
Если сайт гипер-популярный, или сделан на популярном движке, то спам такого сайта сводится для спаммера к очень простым и понятным действиям. Нужно только один раз вручную дать комментарий на интересующий сайт и посмотреть в отладчике, какой бэкенд запускается, и какие параметры ему передаются. Потом внести изменения в скрипты своих роботов и все! Вызывается бэкенд с параметрами точно так, как вызвался бы он аяксом. В итоге мы опять не имеем уверенности в том, что кнопка была нажата на сайте живым пользователем.
Но метод «аяксовой кнопки» можно комбинировать с методом «переменных полей», что однозначно усилит защиту до вполне адекватных величин.
Метод «аяксовой кнопки» можно дополнительно усилить. Мы можем каждый раз обращаться к нашему бэкенду по новому имени. Мы можем менять имя бэкенда каждый день подобно тому, как выше предлагалось менять имена полей. Наверное, менять имя бэкенда даже проще. Представьте себе, для того, чтобы вас заспамить, нужно будет каждый день вручную вносить изменение в скрипт. Нет, я не думаю, что кто-то будет этим заниматься.
Мы можем запретить прямой вызов бэкенда. Это слабая защита, но иногда срабатывает. Запрет этот лично я реализовал с помощью механизма сессий.
Метод, который я назвал бы «разрешите войти»
Это тот самый метод, который мне кажется спорным. Я использую его за некоторую специфическую изощренность и эстетическую странность и необычность (мое личное мнение). В чем же его суть?
Перед тем, как углубляться, хочу немного отвлечься.
Отступление № 1
Давайте предположим, что у нас на форме есть hidden input. Перед тем, как отправить форму на сервер, мы заполняем этот инпут чем-то и по наличию этого «чего-то» мы и судим — робот у нас был или человек. Предлагаемый ход — это некоторое видоизменение метода «аяксовой кнопки». Суть в использовании клиентского скрипта, который недоступен роботу. Но мы сразу вынуждены заметить, что метод будет хорошо работать, только если содержимое этого поля всегда будет разное. Не так ли работает обычная капча?
Отступление № 2
К моей предыдущей статье про методы защиты сайта на публичном хостинге было дано много комментариев. Некоторые из них имели тот лейтмотив, что бороться со взломом невозможно, ибо вас всегда взломают, если кому-то это действительно нужно. Я согласен с этим выводом, но не согласен с тем, что не нужно бороться! Точно такой же лейтмотив присутствует на форумах автосигнализаций. Там ситуация очень похожая. Суть тамошней уязвимости в том, что вы нажимаете на кнопку брелка, код ваш перехватывается приемником из соседней машины с тонированными окнами, глотается им, код охраны подменяется и ваш автомобиль ставится на охрану чужим кодом! Все! Грош цена вашей сигнализации! Тогда наши коллеги из сферы автосигнализаций придумали следующий метод решения проблемы. А что, если брелок будет посылать на автомобиль не команду "Встать на охрану с кодом таким-то", а вопрос "Можешь ли ты встать на охрану с кодом таким-то?" И если ответ положительный, то автосигнализация отвечает. "Становлюсь на охрану с этим кодом и посылаю его обратно для проверки". Брелок проверяет совпадение кода посланного, присланного обратно, и если они совпадают, то машина стоит на охране с вашим, а не с чужим кодом. Задача решена. А если не совпадают, то запрос нужно просто повторить. Автолюбитель этого даже не узнает.
Может похожий метод решить вопрос капчи?
Я попытался!
Укрупненный алгоритм работы формы
- Форма заполняется данными.
- Нажимается кнопка отправки.
- На сервер аяксом посылается запрос типа «Собираюсь зарегистрировать пользователя.»
- Сервер регистрирует запрос в базе данных или в простом файле, регистрирует время запроса и время, когда запрос становится недействительным, например, 30 секунд. После этого код запроса в виде строки (хэша) отправляется обратно.
- Наш клиентский скрипт записывает этот код в наш input hidden с именем «ntspm» и смело отправляет все параметры на сервер.
- Сервер берет код из хидден параметра. Проверяет его наличие в списке зарегистрированных кодов, проверяет, не истекло ли время, совпадает ли тип операции, и если все совпало — регистрирует пользователя в полной уверенности, что это был живой человек.
Есть слабые места? Да есть. Спаммер может сделать программу, которая будет посылать запрос кода, потом подставлять этот код в свою посылку. Но это будет индивидуальный робот именно для вашего сайта, и что-то мне подсказывает, что для простого сайта, для интернет-магазина и даже для приличного интернет-магазина никто программу такую писать не будет специально. Обломятся! А если мы скомбинируем этот метод с усилителями из предыдущих методов, то можно довести степень распознования робота до очень высокого процента. Боюсь вот так тыкать пальцем в небо, но я бы дал процентов 98,5. Просто потому, что проблем для спаммера столько, что честное слово, легче зайти живому человеку и ручками послать все, что нужно. Капча в случае с живым человеком, понятное дело, не поможет.
Резюме
Мне кажется, что избавиться от капчи можно! Тем самым можно сделать жизнь своих пользователей чуть-чуть легче и попутно повысить конверсию своего сайта.
Я по долгу службы часто захожу в сервис «Подбор слов» от Яндекса. Там теперь на каждый запрос стоит капча. Если это метод замедления работы пользователя, типа "Подумай еще раз! Может тебе эта инфа на самом деле не нужна?", то тогда понятно. Но если это реально защита от роботов, то почему бы не поставить обычную кнопку с надписью «Продолжить» и использовать один из вышеприведенных методов с усилителями?
Давайте сделаем интернет чуть-чуть удобнее!
Ссылки
Мой сборщик спама. Сайт этот не для людей! Его оформление призвано это продемонстрировать. В нем (по ссылке «добавить объявление») реализован метод «разрешите войти» без усилителей. За много лет ни одного «пролета» не было. Но справедливости ради хочу уточнить, что «пролетов» не было и на методе «аяксовая кнопка» без усилителей. Да и роботы всегда меня одни и те же посещают и все они без изысков, что очень жаль.
Комментарии (78)
runcore
04.08.2015 13:58+9Для спамера, все проблемы свелись только к тому, что вместо одного запроса, теперь нужно посылать два. сначала узнаем код, потом подставляем его во второй запрос и успешно его отправляем. На полноценную замену капчи не тянет.
Urvin
04.08.2015 13:59Автор упирает на то, что универсальному роботу проще обойти стороной его сайт.
FreeMind2000
04.08.2015 21:14+3Все верно — для универсального бота, достаточно ЛЮБОЙ нестандартной защиты (1й метод самое оно)
А от бота специализированного на вашем сайте — вы универсальную защиту не придумаете :)
belkin-labs
04.08.2015 14:03-9А вы попробуйте.
Сначала зайдите в форму.
Потом задайте пробный коммент
Потом определите, что за алгоритм работает
Потом поэкспериментируйте с бэкендом, который коды выдает
Потом попрубуйте скомбинировать одно(!) пробное письмо со спамом
Потом, когда увидите, что письмо не прошло, догадайтесь, что код работает ограниченное время
Потом сделайте программу специальную для спама именно моего сайта.
Потом плюньте на это дело, и решите, что легче спамить какие-нибудь другие сайты.
xdenser
04.08.2015 14:05+14Метод аяксовой кнопки будет работать пока спамеры не освоят phantomjs. Странно, что до сих пор не освоили, он уже давно существует. Впрочем он довольно медленный, может это их останавливает.
equand
04.08.2015 16:13-1Метод аяксовой кнопки можно свести к нулю, если использовать браузеры в бекграунде или что-то вроде pyv8, spydermonkey которые позволят запустить javascript в сендбоксе и получить вывод (делал похожее, работает с DOM эмулятором).
Есть вариант проверять кнопочный или мышечный ввод.
Иной вариант, шифровать данные. Еще другой вариант, давать клиенту выполнять времязатратную работу (вроде биткоинового расчета). Чем больше запросов из одной сессии или от одного пользователя, тем дольше работу пусть js выполняет.alekciy
04.08.2015 23:56spidermonkey все же js движок и он не даёт нормальный DOM. Выполнять в нем код со страницы как есть не получится. Как и v8. ОЧЕНЬ много (в сравнении с phamtomjs) приходиться допиливать.
equand
05.08.2015 00:28github.com/andreasgal/dom.js
Вот это исправляет этот недостаток, проверено (делал антивирус для веб сайтов, который эмулировал js).alekciy
05.08.2015 18:26На сколько там адеватный DOM? Каким образом подхватывается JS со страницы?
К примеру, при использовании PhantomJS через webdriver можно вообще этим не запариваться и нужно просто тупо написать XPath выражения для навигации/манипуляции по дереву. Со spidermonkey так нельзя, приходится выдергивать нужные куски JS-а со страницы, примешивать свой JS и только после этого получить данные. Сложно сапортить, требуется много времени (раза в 2-6 больше, чем для PhantomJS) в случае модификации исходных JS. Как с этим у данного проекта?
skey
04.08.2015 19:55+1GoogleBot давно отправляет ajax-запросы, бывает с разных ip или с задержкой, но сам факт. Так что спамеров, думаю, не долго ждать осталось.
maxru
04.08.2015 14:24+10В том, что роботы не умеют закачивать и обрабатывать скрипты JavaScript.
И в этот самый момент вам в окно постучал бот на WebDriver.Bonch
05.08.2015 01:00+1Я писал робота, который парсит сайты, задействуя при этом headless webkit. Так что никаких проблем написать робота с выполнением js нет и спамеры и прочие ботоводы это знают.
dyll
04.08.2015 14:32+12Нужно, чтобы имена полей в форме не имели смысловой нагрузки.
А как же автозаполнение? Лучше ввести 4 цифры капчи, чем вручную заполнять все поля заказа. А как же сохранение логина/пароля?
Уж если есть задача защититься от универсальных роботов без капчи, то лучше исходить от обратного: роботы заполняют поля с понятными им названиями. Добавляем такое поле, делаем ему display: none; и autocomplete=off, а на сервере проверяем его наличие и пустоту.dom1n1k
04.08.2015 15:43+2Так логин/пароль надо сохранять в форме логина, а автор про форму регистрации.
А вот способ «от обратного» поддерживаю, сам об этом подумал.
msfs11
05.08.2015 10:42+2Писал несколько десятков интернет-магазинов, вариант с display: none; практически не работает.
Может, конечно, наши магазины привлекали каких-то особенных ботов.levchick
05.08.2015 13:38+1А display: none куда убирали? Мы обычно прячем в css за сложным селектором. И от названия поля тоже много зависит. Естественно вариант не спасет, если спамить будут конкретный сайт, но от случайных ботов очень даже.
msfs11
05.08.2015 14:07+1>А display: none куда убирали?
уже не помню, больше 5 лет не занимаюсь разработкой
alekciy
05.08.2015 15:29+1Сложный селект, «крыть хитро без display: none, z-index-ами и наложением» как предлагает Blumfontein тоже не вариант в случае headless browser. Потому что бот видит/не-видит ровно то, что и все остальные посетители.
levchick
05.08.2015 16:17+1Разумеется, но таких ботов маловероятно будут пускать просто бродить по интернету в поисках куда наспамить. Такая защита поможет для небольших сайтов и от случайно забредших роботов, и судя по опыту помогает в этом случае не плохо.
alekciy
05.08.2015 18:20Ну я бы сказал так… В текущий момент нужно слишком много железа что бы такой бот бродил по инету вслепую. Но решаема и эта задача. Такой бот может провести анализ в один поток, медленно, тяжело… но в итоге сгенерит набор правил для более легковестных систем (через тот же curl). Я думаю таких систем со временем будет появляться больше и больше. Ну и да, написать алгоритм генерации правил непросто, что и сдерживает этот процесс.
levchick
05.08.2015 21:36Решить можно почти любую задачу, вопрос рентабельности. До тех пор, пока есть сайты без защиты вовсе или же с примитивной капчей, то рентабельней спамить их, чем придумывать столь нетривиальные подходы. По этому пока работает, будем использовать :)
Blumfontein
05.08.2015 13:59+2>> вариант с display: none; практически не работает
Можно скрыть хитро без display: none, z-index-ами и наложениемrubyrabbit
06.08.2015 15:52Можно не скрывать, а честно написать: «заполните это поле, если вы спамер»
AlexGx
04.08.2015 14:35+9Аякс-кнопка и другие изощрения помогут только против школьных скриптов, современные боты быглядят как оттюненный phantomjs c отправкой разгадывания капчи индусам.
Tramvai
04.08.2015 18:57+2У нас индусы разгадывают капчи при необходимости + закупаем пулл аддресов. Каждый новый запрос приходит и нового адреса и с рендомным юзерагентом. Используется phantom+curl в несколько потоков.
PS. Используем не для спама а для парсинга. Прошу смотреть на это с професиональной точки зрения.SlimHouse
20.08.2015 02:50Иногда полезно сохранять связку прокси с определённым юзерагентом/кукой. Если я правильно понял, что работает одновременно несколько инстансов фантома, то подскадите, сколько у вас это все потребляет памяти?
NeXTs_od
04.08.2015 14:46+1«Нужно, чтобы имена полей в форме не имели смысловой нагрузки»
Это если проверять по полю name, а есть ведь еще type
password / email по умолчанию, остальные допустим text, уже легче
И как вариант бот может не раздумывая какой name что означает просто рандомно перебором посылать все возможные варианты, каждая 5-10 попытка будет проходить.
ekim
04.08.2015 15:02использую метод создания токена с помощью js для одного из полей.
срабатывает при submit и не требует ajax.
избавляет от автоматического спама
за несколько лет не припомню чтобы пролезло что-нибудь — причем у меня токен никогда не меняется и виден в коде.
идеально подойдет для малоизвестных сайтов.
m0Ray
04.08.2015 15:08> роботы не умеют закачивать и обрабатывать скрипты JavaScript
Лет N назад это ещё могло быть верным. С появлением таких фреймворков, как SlimerJS и PhantomJS ситуация поменялась.
mwizard
04.08.2015 15:08+3Автор, а как быть, если бот будет использовать PhantomJS, CEF или Selenium?
P.S. Я буду обновлять комментарии перед отправкой, я буду обновлять комментарии перед отправкой…belkin-labs
04.08.2015 15:34Говорю совершенно откровенно. Я не знаю, как быть.
Мне хотелось бы для начала ознакомиться хоть с одним таким событием. На мое сборщике спама стоят все возможные, как мне кажется ловушки. Если будет событие прохода спама, то я, наверное, посмотрю, поймалось ли что-нибудь в ловушки.
Если спаммер будет программно нажимать на Яваскриптовую кнопку, то, боюсь, кроме капчи не будет спасенья.
Но тогда я буду выступать за более приличные капчи. Где не нужно глаза ломать и сильно напрягаться (я плохо вижу). Я за капчу в виде вопроса. Например, «Введите цифрами число 747». Причем в словаре должны быть не однотипные вопросы, а разные. Выраженные разными словами и не имеющими общей схемы.
Но заметьте. Спаммеры хотят нас спамить! При этом борьба с JS явилась бы для них прорывом! Но эта технология не внедряется повсеместно и быстро. Значит есть какие-то сложности в этом деле и мы еще поживем!mwizard
04.08.2015 15:37+1Ну, а для вопросов «введите цифрами число 747» есть рендеринг части страницы в картинку и ручные сервисы по распознаванию капчи (причем копеечные — порядка 2$ за тысячу капчей), с кучей русскоязычных работников в том числе.
belkin-labs
04.08.2015 15:50Я ошибся, прошу прощения.
Вопрос «введите цифрами число семьсот сорок семь»
В другой раз должен быть другой вопрос, например, «сколько минут в часе?»
В третий раз «А правда, что в часе 60 минут? Ответьте да или нет»
В четвертый «А в сутках двадцать четыре часа или двадцать пять?» Введите ответ цифрами
и так далее по списку готовых вопросов. Боюсь, тут нужен искусственный интеллект, что отвечать на такие вопросы.
И вот тут мы плавно переходим еще к одной очень интересной теме. На вопрос «Какой спутник планеты Земля» (ответ Луна) порядка 10% пользователей не могут дать правильного ответа, и от них идут письма администратору. Некоторые письма с текстом «Что за безобразие ваша капча???» Другие письма «Программисты, исправьте капчу, она не работает!» Проблема, буду крайне толерантным, в первичном отборе пользователей.
Графическая же капча отбирает только тех, у кого хорошие глаза и крепкие нервы.mwizard
04.08.2015 15:52+1тут нужен искусственный интеллект, что отвечать на такие вопросы
Зачем искусственный, когда есть вполне себе натуральный интеллект, который не прочь заработать 2$ за 1000 ответов на глупые вопросы? Под русскоязычными работниками я имел в виду не саппорт, конечно же, а самих «распознавателей».
Iv38
05.08.2015 11:50+1Капча с вопросами ограничена набором этих вопросов. А значит ее можно взять брутфорсом и составить справочник, после чего она перестает существовать. Естественно, от спамера опять же требуется индивидуальный подход к сайту.
aikixd
04.08.2015 15:58+2Учитывать время на заполнение формы, события focus, движение мыши по экрану, нажатие таба, скролл и тд. Все вещи которые сложно подделать, но делаются обычными пользователями. Хотя для малого сайта это оверкилл, по моему.
equand
04.08.2015 16:18-1random может это покрыть. отправлять столько событий сайт будет супер-медленным, плюс возможность ддоса открывается.
aikixd
04.08.2015 16:41+1Кроме движения мыши, остальные события не слишком многочисленны. Для мыши можно сделать доклад о движениях.
Рандом не поможет, если анализировать информацию и проверять, что действия логичны. К тому же, рандом это вобщем-то белый шум, а человек так себя не ведет. Конечно можно написать неправильный рандом, но это упирается в желание спамера заспамить сайт. Написать этот метод непросто, как и метод его обхода.
От ддоса тоже можно спастись.equand
04.08.2015 19:17Проблема в том, что все, что можно проанализировать, значит можно автоматизировать.
Никакого неправильного рандома не надо. Записали движение нормальные скриптом (делается проще простого), а потом даем отклонения небольшие в пару пикселей.
equand
04.08.2015 16:17Заставьте через JS делать proof-of-work. Это рабочий вариант.
Другой вариант слушать ввод букв и движения/клики мышки, тогда можно предсказать, робот это или человек.
Proof-of-work проще и намного быстрее реализовать.
questor
04.08.2015 15:11+3У меня двойственные ощущения от прочтения статьи.
С одной стороны, я однозначно «за» повышение грамотности разработчиков, поэтому ещё одна статья, где описываются подходы излишней не будет. Да и написана достаточно толково.
С другой стороны, явный велосипедизм. «Метод переменных полей» (чаще его называют методом скрытых полей). Нужно сказать, что Котеров ещё в 2005 — 2006 годах описывал механизмы работы с формами, в том числе описывая и «цифровую подпись формы» — в терминах автора «методика разрешите войти». Велосипед хорошо обкатан, автор хорошо понял за много лет тонкости вопроса, поэтому не могу сказать, что это такой уж сильный грех.
Ну и напоследок. Подходы, которые описаны в статье неплохо работали последние 10 лет, некоторое время ещё послужат. Но технологии не стоят на месте — нужно готовиться не к войне вчерашней, а завтрашней — с ботами, умеющими выполнять JS.
P.S. Я буду обновлять комментарии перед отправкой.
belkin-labs
04.08.2015 15:27Я согласен с вами на 100%
В поддержку вашего комментария добавлю.
По моему опыту роботы из года в год все такие-же унылые и работают по одному и тому же алгоритму, ничего не меняя, не соврешенствуясь, не используя новых алгоритмов. При этом хозяева роботов однозначно разные. Я проверяю их айпишники по www.projecthoneypot.org и иногда, очень редко, по содержимому. Кто-то специализируется только на виагре с циалисом и никуда с этих позиций не двигается, как ни странно.
У меня какое-то время была тоже капча, примерно, как в вашем посте, только я еще и ответ писал. У меня был вопрос типа: «Сколько будет 345 помножить на 312? Ответ: 107640». И никаких «пролетов»! Ни один робот не был на такую наглость рассчитан.
Причем графическую капчу читать могли и читали просто на ура!
Я, если честно, не знаю иерархии в среде спаммеров. Есть, например, среди них начинающие, тренирующиеся и гуру? Как отбираются сайты, достойные внимания гуру? По каким признакам и параметрам? Все это очень интересные вопросы, если влезать в тему реально глубоко.
Вот еще очень хороший вопрос. Антиспам-подходы Яндекса и Гугла, как самых крутых для примера? Эти подходы формируются из реальных нападений, или админы просто такие же программеры, как мы и многократно перестраховываются просто из соображений огромной ответственности, которая на них лежит?
m0Ray
04.08.2015 15:28А ещё на одном сайте я видел такую «капчу»: пользователю показывается четыре разноцветные цифры, причём прямо в HTML, а не картинкой, и надпись: «введите первые две цифры из четырёх». И ведь это работает!
sHinE
04.08.2015 15:38На паре свои сайтов сделал еще проще — просто добавил поле и рядом надпись, просящую ввести написанное прописью число цифрами. За несколько лет число спамовых регистраций — единицы.
Вся суть такой защиты в том, чтобы быть уникальной, чтобы спамерам дороже было плюнуть на сайт, чем заморачиваться с правкой скриптов.mwizard
04.08.2015 15:53написанное прописью число
Но разве это не самая обыкновенная графическая капча?belkin-labs
04.08.2015 15:58Предполагается, что вопрос написан нормальным шрифтом, не исковерканным, и буквы не налезают друг на друга, нет ряби, снега, наклонов в разные стороны и всего остального, что есть в современных графических капчах.
Temirkhan
04.08.2015 16:16+1Мне ближе вопрос, который просит выбрать картинку с правильным ответом на вопрос, но при этом вопросы не имеют единую природу. Например:
Вариант 1) Выберите картинку, на которой изображен паяльник.
Вариант 2) Выберите самое крупное существо из изображенных.
Это не так отвратительно, как капча, так как напоминает развивающие игры для маленьких детей, и при этом роботы с малой вероятностью пройдут такой тест. Если же роботы научатся правильно распознавать вопрос и отвечать на него, что ж, можно считать, кто-то сделал неоценимый вклад в развитие ИИ )cjfynjy
05.08.2015 02:36Помните рапидшару с ее котиками году так в 2008-м? Сломали же в конце концов. :)
sHinE
04.08.2015 18:23Нет, число было написано простым текстом без всяких картинок. Т.е. там текст что-то типа «введите число тысяча пятьдесят цифрами».
Fuco
04.08.2015 16:33+9Здесь нужно оставить комментарий про reCaptcha 2
Отличное решение с очень простой интеграцией.
vba
04.08.2015 16:41Вы не упомянули о варианте использования анти-капчи, это когда есть скрытое поле например с именем email и вы решаете что при использовании формы человеком это поле всегда будет пустым. Тупой бот конечно-же заполнить это поле и тогда вы сможете его определить. Успех тоже весьма сомнителем но такая методика существует.
akirsanov
04.08.2015 17:46+4Всё упирается в мотивацию спамера.
Если у вас обычный сайт с сотней посетителей в сутки, спаммеру скорее всего не будет интересно затачивать решение — затраты время/профит несоразмерны, ему будет проще потратить время на другие сайты.
Если взять за пример сервисы Яндекса — то на следующий же день после ввода такой «капчи», без кавычек тут уж никак, в добрый десяток инструментов типо хрумера и яззла встроят автоматический обход.
Тоже самое и с массовым внедрением подобной «капчи» в CMS/форумы — обход данной «капчи» повысит профит, не тратя денег на распознавание графических капч людьми по 2$ за 1000 капч.
А для мелкого сайта с такой «капчей» идеально работает принцип неуловимого Джо. Вас не спамят только потому, что это никому не нужно.
vorobyev
04.08.2015 17:48Наивный вопрос.
Интересно, а почему нельзя окружить кнопку отправки формы графическими элементами с событием «onMouseOver» тогда при переходе на данное поле будет генерироваться событие — которое меняет параметр, говорящий что пользователь — не робот.vanxant
05.08.2015 03:45+2про тач-скрины не слышали?
rinat_crone
05.08.2015 13:29И про отправку формы по Enter, видимо, тоже.
bodqhrohro
05.08.2015 15:21+1И про расширения для сёрфинга с клавиатуры (KeySnail/Vimperator/Pentadactyl/etc). Но что характерно, новая рекапча отрабатывает, даже если после нажатия галочки ничего не делать.
amaksr
04.08.2015 17:59+4Все упирается в то, стоит ли ваш сайт усилий, чтобы его проспамить. Если вы ВК, или ФБ, то даже с кастомными формами и аякасми под вас напишут спам-скрипты, или даже наймут людей из Бангладеша для ручного постинга. А если вы никому неизвестный форум, то вам хватит и простого дополнительного вопроса в форме.
Edit. Пока писал пост akirsanov написал ровно тоже.
styugin
04.08.2015 19:03-1Первый описанный Вами метод хорошо известен. Это технология moving target defense. Пару лет назад натыкался на описание фреймворка как раз с постоянным изменением идентификаторов полей в форме. Валяется где-то файл, могу скинуть если интересно.
Третий метод работать не будет, поскольку очень прост в обходе. В автосигнализациях (диалоговых) происходит передача нескольких пакетов для того чтобы не передавать в открытом виде ключ, который есть на брелке, а только удостовериться что брелок его знает. В вашем случае никакого ключа нет, просто происходит две итерации. Работать он будет в том случае, если по той же технологии MTD постоянно менять логику взаимодействия клиента и сервера. Тогда потенциальному роботописцу придется непрерывно переписывать логику робота до тех пор пока он не поймет по какому принципу эта логика меняется.
alekciy
05.08.2015 00:12+1В наши дни эти методы работают только против школьников и автоботов. Защиты чисто технически уже недостаточно. Бот на phantonjs+xpath пишется за 2-10 часов под любой сайт на котором есть люди.
P.S. Рекомендую написать бота.
OlegoO
05.08.2015 00:15+2Данную проблему можно кардинально решить
Вариант 1. Оставить на сайте только вход через соц.сети.
Вариант 2. Сделать регистрацию через телефон и СМС подтверждение.
Мне кажется что стандартную регистрация с её проблемами и сложностью создания пароля (с длиной, разным регистром, спец символами) для клиента на большинстве сайтов можно смело убирать.Chikey
05.08.2015 01:211 Вход через соц сети это зависимость от безопасности соц сети. Тот же фейсбук имел столько уязвимостей что кроме как на игрушки логин по фейсбуку ставить нельзя ни в коем случае.
2 Если задача задолбать клиента то можно попросить их ввести 10 капч. Я сайты требующие мой телефон либо избегаю либо ищу get sms online в гуглеIv38
05.08.2015 12:09Вход через соцсети, на мой взгляд, плох вовсе не из-за безопасности (точнее, не в первую очередь). Вход через соцсети требует от пользователя наличия аккаунта в одной из них.
Помимо этого, соцсеть знает, где регистрируется пользователь, а сайт знает аккаунт в соцсети — это не всегда приемлемо для пользователя.
А еще лично я использую в соцсетях сложные длинные пароли. Многие сайты не стоят такой сложности, но при авторизации на них я вынужден пользоваться сложным паролем соцсети, что особенно раздражает на мобильных устройствах.
dbanet
05.08.2015 14:18+1Оставить на сайте вход только через соц.сети.
Это отлично! Чтобы сразу было понятно, на какие сайты лучше не ходить.
Chikey
05.08.2015 01:19+1Любая защита от бота обходится. Ваши — вообще в два счета, в виртуальном браузере. Если задача защититься от универсального спамера то способов куча, посчитать 2+2 в JS хватит.
Посмотрите чем занимаются shapesecurity.com
Если бы была замена капче, она бы уже стояла на всех популярных сайтах. Самая интересная альтернатива — hashcash
bodqhrohro
05.08.2015 15:17+1время, когда запрос становится недействительным, например, 30 секунд
Передаю лучи поноса от лица пользователей GPRS.
И да, перечисленные трюки легко обходятся с помощью PhantomJS, который уже широко используется при создании ботов.
MetaDone
Метод аяксовой кнопки — использовал как-то такой метод
только у меня не кнопка, а целиком форма дергалась через ajax, а в ней скрытый рандомный токен и сверка на серверной стороне
в результате если не получили форму через ajax — не получили токен, а значит и сделать ничего не могут