Как стать автором
Обновить

Комментарии 96

Либо еще лучше подключить мод реврайт и отправлять запросы на что-то типа

$_SERVER['REMOTE_ADDR'].time();
?>


/IP_time.jpg

Так уже даже можно название файла не прятать т.к. пока робот зайдет на файл и отправит форму, то значения time() будут разные
Про юзеров без js забыли. А что самое смешное, так это — использование jQuery в данном случае. Просто ппц какой-то. Куда катится этот мир?
>>Про юзеров без js забыли.
Полно вам, это же боты :)
>>А что самое смешное, так это - использование jQuery в данном случае.
А здесь согласен. Подобное можно реализовать в несколько строк JS-кода без дополнительных библиотек.
Опера мини.
ИМХО там это будет работать, хотя стоит проверить отдельно.
Нет, это фаерфоксеры. После пары сайтов, повисших из-за JS,я поставил себе NoScript и очень доволен.
Я фаерфоксер, но никогда не отключу себе JS из-за нескольких горе-кодеров.
Не представляю совсременный интернет без JS, это, мягко говоря, несовременно.
Вы просто не совсем понимаете, как это происходит. Сначала НС убирает скрипты. Потом, если вы сайту доверяете — выбираете в меню контекстном пункт «Разрешить домену …». И всё, проблем нет. Если же вы на каком-то сайте бываете раз в жизнь, то там нажимаете «Разрешить временно». И всё. Так что всё современно :)
Спасибо за объяснение, я несколько иначе всё представлял. Но в любом случае, мне проще раз в месяц перезапускать подвисший Файрфокс, нежели оперировать разрешениями.
О, я не спорю, это тоже вариант, но как разработчик люблю это расширение за то, что позволяет понять, чего стоит сайт без JS. Если бы не это, я бы никогда не узнал, что лучше всех живёт без JS del.icio.us, а хуже всех — 90% остальных веб-2.0 сайтов, считая хабр и контакт.
и что вы делаете с этим сакральным знанием? =)
Определяю, куда равняться, не более :)
script src=""
обоснуйте :)
считаете делишс плохим сервисом?
Юзеры без JS идут лесом (благо их всего 1-2%), вы еще вспомните тех у кого IE3.0 на 95 винде стоит и у кого разрешение 640x480 на 256 цветов.
Да и чтобы не было контр примеров, лдюди которые принципиально пользуются LYNX тоже идут лесом, это прекрасный и удобный инструмент в критических ситуациях, но не более.
Всем никогда не угодишь.
Нельзя, таким образом Вы дискриминируете пользователей с ограниченными возможностями. CAPTCHA в традиционном виде также дискриминация - не дает возможность пользоваться сервисом слепым. Существуют стандарты доступности содержимого, например WAI-WCAG http://webew.ru/articles/332.webew и в рунете таки стандарты тоже появятся в практике скоро (одно из положений итоговой резолюции РИФ)
Если человек добровольно "выкалывает себе глаза", отключая JS, его нельзя сравнивать с пользователем с ограниченными возможностями.
В настоящее время спецбраузеры, используемые людьми с ограниченными возможностями, не поддерживают Javascript и на то есть масса причин. Поэтому стандарты требуют полный эквивалент функциональности при отключенном Javascript.
Это ирония?)
Каким образом капча дискриминирует слепых?
Иронии нет, капча не дает возможности продолжить работу с сервисом. Слепые могут работать в инете, используя браузеры, зачитывающие информацию. Зачитать рисунок браузер не сможет. Например, черновик формата WCAG 2.0 требует для капчи несколько форм для людей с различными нарушениями http://www.w3.org/WAI/WCAG20/quickref/
на некоторых ресурсах есть audio-версия.
LYNX тоже картинки не рисует, так что данный способ не ограничивает этих пользователей
А зачем им пользоваться, если они слепые? о.О
Для них подойдет <noscript> с Captcha
Ага, точно. Для них и для ботов... :-)
"А разве сложно его хорошо криптануть?" — согласитесь, криптовать код до бесконечности нельзя, поэтому выполнить обратную операцию злоумышленник тоже сможет.
Если ваш ресурс, защищенный таким способом довольно популярный, то на ваш обфускатор теоритически всегда смогут написать парсер.

Плюс, некоторые пользователи отключают js.
НЛО прилетело и опубликовало эту надпись здесь
да какие обфускаторы, посмотреть банально в firebug, куда идет запрос, и все
Неееет....Не забывайте про меня Т_Т
1. согласен с exoundeeq, юзеры без js как же?
2. бесконечная битва. кто больше криптанет и тд. хотя в этой битве хотя бы не мучают юзера вводить всякую хрень.
зачот
Ждем ботов с поддержкой JS.
они уже есть. =/
В md5.php создавать сессию с указанным выше содержимым и если форма отправляется без сессии, то робот!

А безскриптовые пользователи будут тогда вбивать каптчи...
Сессия, как известно определяется у клиента либо PHPSESSID в GET-запросе, либо cookie, что используется чаще? Кто мешает боту принимать и запоминать cookie? Сессия не выход.
В md5.php вы выдаете все равно статические данные, которые зависят только от одного параметра - адреса клиента.
Даже если md5.php будет выдавать случайные данные (с использованием salt), то и в этом случае нет никакого спасения - бот делает такой же элементарный запрос к md5.php и посылает правильную форму.
Помните, что бот, как и браузер - это клиентская программа. Ваш способ защиты ничем не лучше каптчи, он остановит только случайного бота. Целенаправленная атака взломает вашу защиту в считанные минуты.
ПС: кстати, "криптование" - ужасно безграмотное применение термина. Используйте термин "шифрование", пожалуйста.
Согласен с Вами.

>>Вы скажите, а что сложного человеку посмотреть JS код, узнать файл md5.php и ботом сначала парсить инфу оттуда?

>>Ну так существует ведь ru.wikipedia.org/wiki/Обфускация JS кода с помощью которой вам надо обфуцировать небольшой JS код в хидере…

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

а борьбой с jQuery ;)
НЛО прилетело и опубликовало эту надпись здесь
вообще любая дырявая абстракция

беда в том, что по-настоящему эффективно использовать такие вещи можно, лишь будучи знакомым со всем стеком технологий — что справедливо для весьма ограниченной части программистов на рынке
Дедушкин способ — добавить лишнее поле в форму и сделать его hidden, робот его будет заполнять, т.к. у него работа такая. В submit'е проверять — если поле заполнено — спам.
Дело 5 минут, папа ботов зайдет, проснифает и бум..
А если сделать динамический обфускатор имен полей? Т.е:


server.obfuscate [username, password, email] => [D05WuXp1, eQ8IjzTz, NpzpeocL]
server.shuffle [D05WuXp1, eQ8IjzTz, NpzpeocL] => [D05WuXp1, eQ8IjzTz, NpzpeocL, qGCyH0vk, EWOEreTg]

далее, сохраняем в сессии мэппинг [username, password, email] => [D05WuXp1, eQ8IjzTz, NpzpeocL] и вешаем клиенту уникальный mapping_id, по которому мы можем восстановить имена полей.

Правда, есть один косяк... Видимо я загнался ;-)
А нельзя сделать скрытый блок отправки коммента и кнопку/ссылку "ответить"? По нажатию открывать блок и ставить JS-переменную (флаг антибота) в true. При отправке ответа проверять значение флага. Крейзи вариант - по нажатию на кнопку/ссылку подгружать AJAX'ом форму отправки коммента...
Конечно, проблема с неJS-юзверями остается, но для них уже придумывать что-то другое наверное.
Я так и сделал на одном своем сайте (ну почти так), роботы идут лесом, но это пока ресурс не популярный, если был бы смысл сделать робота под мой сайт, то эта защита слетела бы моментально.
Вы кажется не представляете как работает большинство роботов спамерских, это не глупенький скрипт, отправляющий пост запросы. Тучи роботов полноценно под браузером заполняют формы аки людишки настоящие.
Ты бы прочитал статью, в твоем посте видно что боты заходят под юзер агентом, хотя мы это знаем...
Предложения вы ппц составляете конечно, ничего доказывать не буду, конечно у вас прекрасный способ, непроходимый просто.
Это было даже круче, чем знаменитая Защита Чубаки. О_О
По сравнению с хорошей капчей - фигня.
Бот пишется за 10 минут.
почему так долго? :)
Это ж субъективная оценка :) Надо подумать, оценить защиту, выбрать способ реализации, поесть и только тогда писать бота - и то больше 10 минут получается =)
А разве боту сложно запустить ваш JS?
оффтоп: у jQuery отвратительный синтаксис, какое-то отрицание синтаксиса всех созданных языков до этого, якобы для более короткой записи
специально для вас был выпущен classyQuery
Вы, видимо, мало языков видели. Посмотрите языки функционального программирования, например.
Сожалею, но лишь самые примитивные боты не понимают JS. Нормальный бот в своей работе использует движок обычного браузера, например под Windows – IE, или под Linux – FF.

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

Этот фреймворк написан на .NET, и позволяет автоматом запускать IE, настраивает параметры соединения, делает заданные запросы... То есть грузится страница как бы из IE, и в нужное место страницы "кликается" мышь, точнее, эмулируется клик мыши, или в нужное поле "вводится" текст. И все, сабмит на форму пошел, никакая обфускация JS кода не поможет.

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

Применяю аналогичную защиту на десятке своих сайтов - никаких проблем.
Для таких сайтов можно использовать любую нестандартную защиту.
Пока универсальнее CAPTCHA ничего нет
CAPTCHA - неудобна для пользователя, поэтому использовать её надо только в крайних случаях. А о пользователях надо заботится, не надо заставлять их делать лишнюю работу, и тогда у них останется хорошее впечатление о вашем сайте.
Капча умерла, до здравствует капча!
любая самописная форма на непопулярном ресурсе не будет атакована спам-ботами, подходит и такой способ как в статье и может еще более простые. А вот если эта форма стоит в вордпрессе или при регистрации в гугле, то тут без капчи не обойтись.
Все же атакуют, хоть редко и довольно тупо.
"С недавнего времени я начал изучать AJAX библиотеку jQuery..
На мой взгляд это лучшая, удобная и легкая либа для AJAX...Прочитав некоторые статьи, доки по либе я решил сделать так, чтобы пользователям на вашем сайте не пришлось смотреть на закорюченные символы"

Вам, господин Isis (и почти всем комментаторам), стоило бы начать с изучения http-протокола.

Бот работает именно с ним. Ему плевать на ваши страницы, формы, JavaScript, jQuery, PHP, сессии и cookie.

Шаблон бота - это запросы (request) клиента и ответы (response) сервера по http-протоколу.

Бот эмулирует все, что происходит между клиентом и сервером на уровне протокола.

Именно потому используют "закорюченные символы", что для бота это нетривиальная задача, так как выходит за рамки простой работы с текстом.
Как вам уже ответили, лишь примитивный бот работает на уровне HTTP. Более продвинутые боты работают через программный интерфейс браузера. Как вариант - можно посмотреть принцип работы селениума.
Бот, работающий на уровне протокола, по определению не может быть примитивным, так как он ничем не ограничен. Не пишите о том, в чем совершенно не разбираетесь и не понимаете архитектуры работы технологий.
Физический уровень передачи ещё менее ограничен, но от этого он не становится более продвинутым. В случае ботов целевым является уровень браузера, поэтому самым логичным является использование именно этого уровня. Иначе же на уровне протокола придётся имитировать специфику работы пользовательских браузеров.
"Физический уровень передачи ещё менее ограничен, но от этого он не становится более продвинутым."

это к чему?)

Вам не надоело нести чушь?) "В случае ботов" целью является выполнение сервером нужных действий, которые он делает в соответствии с полученными им запросами. Браузер - интерфейс, который через 100 прокладок ("специфика работы") отправляет те самые запросы, которые бот отправляет напрямую сам. Следуя Вашей логике, для того чтобы имитировать нажатия клавиш на клавиатуре, нужно построить и запрограммировать робота, который будет нажимать настоящие клавиши на настоящей клавиатуре, лежащей на Вашем столе; клавиатура - браузер, системный блок - сервер, робот - бот.

"Иначе же на уровне протокола придётся имитировать специфику работы пользовательских браузеров."

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



p.s. Хабра тупит (с первого раза мессага не прошла), замучился второй раз набивать то, что я настрочил, забыл уже гы)
боты работающие на уровне протокола, они узконаправленные, т.е работают с теми сайтами, которые они уже знают (что именно, и с какими параметрами POST-ится)
боты на основе браузера, они ищут формы и уже сабмитят в них, ессно они менее быстрые

имхо как-то так
Может я что-то не понимаю... А если я один раз запощу форму руками через браузер, посмотрю какой там хэш ушёл и потом пропишу этот хэш в свой скрипт?
Вы не можете криптануть JS на столько, чтобы нельзя было восстановить исходный код.

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

На сайте с большой посещаемостью такие вещи не помогут...
Это ппц .

1. Бот имеет узкую специализацию. Бот, грабищий картинки с vkontakte, не подойдет для того, что бы выяснять, сколько денег осталось у меня на телефоне (через сайт mts).
2. При создании узко специализированного бота, первое дело — это анализ входов и выходов сайта (уровнь GET, POST запросов).
3. Простой алгоритм бота: получить нужные данные, изменить данные, послать данные обратно на сайт. Какие данные отправлять на сайт, как их получать и как их изменять — за это ответственен анализ.

То, что вы описали, решается на уровне анализа.

Это ппц .

P.S. Для анализа запросов я использую http://www.fiddler2.com/fiddler2/
Есть широкоспециализированые боты. Кому нафиг нужна гостевая на моем сайте с посещяемостью 500 человек в день, чтобы специально под него писать бота, срущего в каментах.
Ненавижу catcha, заполняю форму, а потом облом и мат мой. Неужели нет способов лучще?
лучше, а не лучще=)
Вместо того, чтобы отличать бота от не-бота вы отличаете user-agent'ов с поддержкой JavaScript от user-agent'ов без таковых.

Молодец!
НЛО прилетело и опубликовало эту надпись здесь
любая не стандартная защита - защита от стандартных ботов.
Любой популярный ресурс реализовавший не стандартную защиту - автоматически переводит эту защиту в разряд стандартных через Н (полгода максимум) времени (если сам её не меняет).

Так что ваш код идеально подходит для вашего проекта, пока он не популярен.
$_POST['hash'] – вместо ключа "hash" тут должен быть "code", исходя из строки <input type="hidden" name="code" value="'+hash+'" />
Тут дело в том, что если это кому-то сильно надо — написать бота с выполнением ява кода (даже разбираться в нем не надо) проблем не составляет, но изворачиваться ради сайта, отдача от которого минимальна никто не будет
НЛО прилетело и опубликовало эту надпись здесь
+1, этому бояну уже года 3. За это время уже все научились так делать, а боты научились обходить.
Я склоняюсь к анализу активности с определенного IP.
Если например мы постим первый раз или с допустимым интервалом, никакой капчи нет.
Вероятность прохода можно сравнивать с вероятностью прохождения человекоботами, от которых нет защиты.

Есть еще идея каждый раз генерировать случайные имена полей, часть из которых используется, а часть нет.

собрать так несколько способов, реализуемых на стороне сервера.

На самом деле капча уже поддостала ...
я мало понимаю в этом, но не будет ли сильной нагрузка на сервер?
Все машинно-анализируемые методы падут рано или поздно перед ботописателем. Лучше защиты чем картины с цифрами нет. И не стоит изобретать велосипед с квадратными колесами. Если окинуть взором все защиты от ботов, то 99% это картинки, а у 1% её вобще нет :)
ИМХО чем ставить такое лучше уж криптозащиту поднять. И пусть юный хакер Петя ищет в гугле как скрестить fsockopen с ssl :D
берется WebKit в сорцах, отключается cross-domain security - вуаля, простеньких ботов можно писать прямо на JS
кто такой инпат?
Так в некоторых "местностях" произносят слово input. =)
Это ещё цветочки — у меня в своё время одна из преподов по вычтехнике произносила PageUp как "пэ-гэ-дэ-уп". Но то было время тёмное, виндовсов ещё никто не ценил и IBM-клавиатуры ещё были новинкой.
сын линапса и бзди
Таким методом можно отделить не человека от робота, а броузер с яваскриптом от некой другой программы парсящей html и заполняющей форму.
Задача кпчи немного другая :)
К тому же, бот может парсить html и заполнять форму com-объектом explorer.
Мне кажется, если CAPTCHA и будет заменена в будущем, то на поручительство.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории