Интересный способ защиты от ботов

Наткнулся тут недавно на одном сайте на способ защиты от ботов без использования каптчи и javascript.
Все очень просто — достаточно добавить скрытое поле с символом кодированным в HTML сущность (например © — и т. д.). Дело в том что браузер найдя такой символ преобразует его перед отправкой в обычный, а робот использующий парсер форм так и отправить закодированным (причем у меня есть свой парсер форм и он сделал бы именно так). При проверки формы достаточно просто посмотреть длину строки в этом поле. Если отправлял человек то она будет равна числу символов в строке, а если нет значительно больше.
Так что такое решение пусть и не обеспечивает серьезной защиты но вполне может применяться в тех случаях если что то более сложное использовать нельзя.

P. S. пример
P. P. S. Оказывается у меня тут в черновиках статья лежит про методы защиты от ботов и их обходы, стоит дописать?
+55
10 августа 2009, 22:14
64
MadJeck 40,7

комментарии (72)

+7
remal #
Когда я писал парсер, я страницу преобразовывал в XML и работал с ней через XPath.
А вообще надо писать парсер на основе браузера и тогда на все пофиг будет.
0
sl_bug #
selenium rc + phpunit например :) довольно интересный парсер выходит
0
kurokikaze #
Не тяжеловат будет? :)
+1
sl_bug #
тяжеловат, зато результат адекватный всегда и геморроя меньше. хотя тяжелость зависит от сервер, где это крутится :)
+2
MadJeck #
Я свой парсер писал во времена php 4 и тогда слова DOM не знал вовсе, думаю не у меня одного парсер на регулярках :)
0
sl_bug #
я в своем парсере всегда делаю html_entity_decode :) т.к. часто встречаються нужные данные, которые в таком виде, не очень удобно читать.
+6
david_mz #
Ну, если Ваш парсер такой… простой, то нет надо думать, что и остальные такие же. Понимать энтити — это базовое умение любого парсера, думаю, и спамерские это прекрасно умеют.

Кстати, и remal выше совершенно прав насчёт использования готового браузерного движка.
+2
MadJeck #
Если так думать то любая защита примитивна, да можно обойти любую защиту (благо имею опыт в этом деле). Но в некоторых случаях лучше поставить защиту «от дурака» чем нервировать пользователя. А этот вариант мне кажется достаточно красивым.
+1
kolen #
Спамят обычно всякие школьники, поэтому парзеры у них соответствующие.
0
david_mz #
Откуда такая статистика?
0
kolen #
Кто еще будет спамить ссылками, скрытыми в <div style=«display: hidden;» >? Ясно же, что поисковики такое сразу определяют. А спамят и очень много.
0
ConstNW #
поисковики определяют что?
+1
kolen #
Школьники спамят чем?
0
ConstNW #
причем тут чем спамят?
я про «поисковики такое сразу определяют». какое такое? О_о
0
gro #
blgo.ru/blog/2009/06/05/antispam/ — здесь несколько подобных примочек описаны.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
+1
Selector #
хороший способ… возьму на заметку, буду пользовать в комплексе со способом топика.
+6
bobermaniac #
А потом без яваскрипта ваш сайт не отображается вовсе. Клево. Шикарно.
+2
Selector #
Зачем так категорично? Нет яваскрипта будте добры, проходите тест Тьюринга.
–1
maxshopen #
Да но откуда возьмется сама форма, если она в JS-файле?
+1
kurokikaze #
Ну после капчи её можно показать и в HTML :)
НЛО прилетело и опубликовало эту надпись здесь
0
maxshopen #
За хамство не сочту, но к чему вы привели этот код я не понял. Он будет работать при выключенном JS?
НЛО прилетело и опубликовало эту надпись здесь
0
maxshopen #
Я спросил откуда возьмется форма если отключен JS, а сама она в JS-файле лежит, по-моему по контексту ветки это должно быть понятно.

Меня не смущает ничего, из того, как работают (или не работают) стартапы. Корпоративный сайт обязан поддерживать функциональность по максимуму, и с отключенным JS тоже.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
0
bobermaniac #
Это не показатель качества проектов. Это показатель количества мудаков.
НЛО прилетело и опубликовало эту надпись здесь
+1
rhrn #
минус — не получиться Unobtrusive Javascript
+2
slatvick #
Интересный, а главное простой способ. К сожалению, как и многое другое, он будет служить очень короткий срок.
0
fog #
Помойму — гораздо проще добавить в поле скрытое средствами CSS поле, с именем, например «message». В принимающем скрипте проверять — если поле пустое — всё нормально, если заполнено (а бот заполнит обязательно), то блокировать такое сообщение. Делов-то.
0
WASD42 #
Почему это бот обязательно заполнит? :) Чуть более продвинутый бот проверит все CSS-наследования и запросто поймёт, что туда писать не надо. С другой стороны — против лома нет приёма :)
+3
roh_roh #
как показывает мой личный опыт, скрытое через css поле «company» заполняют порядка 95% ботов. 90% из них пишут в него «google» (за что гуглу большое спасибо). до того, как я вставил это поле, мои хитрые алгоритмы отсеивали около 70% ботов. теперь ровно 100%.
0
naz #
Даный метод называется Honey Pots, сам им пользуюсь, спратать даные поля можно и с помощью javascript.
0
kocten #
+1 но для полной гарантии имеет смысл добавить ещё пару популярных полей, вроде «name», «surname», «age»…
и включить проверку ПО ВРЕМЕНИ:
боты любят запоминать состояние hidden'ов чтобы форма точно дошла до получателя, если мы передадим в hidden текущую дату и время, а потом при отправки письма сравнивать это значение с текущим временем. Ведь только бот сможет отправить форму меньше чем за 3 секунды и только бот сможет «отправлять» форму более 12 часов =)
+3
lumian #
и только человек может в той же опере нажать Ctrl+Enter и написать «Пацталом!» или «зачОт!» в течении пары секунд…
0
fog #
Потому что нет таких умных ботов, чтобы CSS парсили.
0
zorba_buddha #
всего лишь дело времени.
0
Troytft #
Я использую динамические поля, они генерируются каждый раз заново + скрытые формы
0
qwertysx #
>>P. P. S. Оказывается у меня тут в черновиках статья лежит про методы защиты от ботов и их обходы, стоит дописать?

Ну если уже на то пошло, так пишите.
–3
vpbar #
самая надежная защита — это не пущать никого. Ну или ограничивать количество сообщений и т.п. по ip.
А если нельзя не пущать. То можно максимально усложнить труд спамо-программистов используя динамическое создание форм в DOM и сложное взаимодействие элементов DOM. В этом случае придется делать бота используя браузерный движок, что сложнее. А вот если для браузеров без яваскрипта писать отдельные формы с капчами, то это по-моему лишнее. Качпа она 3 копейки стоит за штуку.
Хотя любая защита — это хорошо. Если она заставит потратить пару дней на написание отдельного бота для этого сайта — это уже уберёт большую часть спама. А если сайт не сильно посещаемый, то мало кто будет допиливать бота конкретно под ваш сайт.
0
roh_roh #
ограничение количества сообщений не спасает от ботов, а только уменьшает количество сообщений от них

«придется делать бота используя браузерный движок» — не придется, они давно есть

отдельный бот отдельно банится на раз, за редкими исключениями. только сначала еще надо такой сайт сделать, чтобы под него отдельного бота стали писать…
0
MadJeck #
В самом начале промелькнула ссылка на seleniumhq.org/projects/remote-control/ еще аналоги есть?
0
roh_roh #
я занимаюсь защитой от ботов, а не их написанием :)

то, что боты замечательно работают с javascript я уже давно выяснил на собственном опыте :(
0
MadJeck #
Ну что бы написать хорошую защиту надо смотреть со стороны. Вот например вы использовали защиту на javascript, все красиво, работает, но к примеру я буду видеть что вот тут у вас функция дешифровки скрытого поля на XOR шифровании и мне ничего не стоит её реализовать вместо того что бы использовать полноценный парсер javascript. Тут надо учитывать что сложность защиты != ее стойкости.
0
roh_roh #
защитой от ботов я занимаюсь вынужденно. т.е. вот, привалило всякой фигни, смотрим что бы с ней сделать. сначала спам в мыло, потом в формы. ну и так потиху избавился от всего этого. благо сайт не тот, под который кто-то стал бы персонально писать бота.
0
MadJeck #
Ну это не так плохо как кажется, скорее всего работают комбайны типа хрумера, так что достаточно будет поля назвать по другому (не url а iddqd например).
0
ConstNW #
тот же хрумер обучается.
0
roh_roh #
хотя можно и для тестирования юзать, а не только для гадостей. гугл сходу подсказывает simile.mit.edu/wiki/Crowbar и wtr.rubyforge.org/
+1
MadJeck #
Да уж конечно не только для гадостей много для чего. Мне например просто автоматизировать действия удобно некоторые, например хочу оплату через PayPal автоматизировать.
0
bobermaniac #
Бот с браузерным движком — не самая большая проблема, особенно в винде. IE замечательно подтается автоматизации через интерфейсы. Работать будет не сильно быстро, зато таких ботов может клепать пачками любой быдлокодер.
–1
AlphaLight #
Не сильно быстро? Быдлокодер? Ох как словами бросаетесь :))
0
bobermaniac #
Я говорю то, что есть, ибо по долгу службы пришлось однажды заниматься автоматизацией IE, дабы не заниматься написанием собствненого парсера и JS-движка.
0
AlphaLight #
Собственный JS движок это крутовато, конечно. Я занимаюсь подобными задачами постоянно, в рамках разработок клиентов, не все так прозрачно.
0
bobermaniac #
Не сложнее, чем любая другая автоматизация.
0
AlphaLight #
Вы о готовых решениях, или самописных? Нет, любая задача решаема, конечно, но портировать весь JS дорогого стоит.
0
bobermaniac #
Я об автоматизации IE.

У него внутри все есть.
0
MadJeck #
Да, но он очень медленный как мне показалось и довольно глючный, допускаю что плохо разобрался, но сходу заставить COM объект правильно работать у меня не получилось.
0
bobermaniac #
Он не глючный, он спецефичный.

Он работает со скоростью браузера (то есть в разы медленнее парсера), но умеет все то же самое, что умеет браузер, и любая защита, настроенная на скрытые поля и прочие вещи, которые, теоретически, парсер не умеет, обходится им на раз.
0
MadJeck #
Да я согласен, просто у меня не получилось обойти flash защиту с его помощью, хотя в самом IE все работало.
0
AlphaLight #
Медленный? Честно скажу, пробовал Mozilla движок, раз в десять медленнее для анализа данных получалось (правда это было года два назад, все могло измениться). Правильная работа дело рук программиста:)
–1
olegich #
теперь все, у кого это не было реализовано, — реализуют.
0
zorba_buddha #
и боты начнут и их парсить…
0
jandosul #
С первого раза не понял, но дочитывая комменты весь прикол в том, чтоб вставлять xml entities.
Я не думаю, что роботы настолько наивны не понимать их.
0
Gibbzy #
Но дело в том что если какой нибудь злостный хаккер захочет написать вам стопицот комментариев скажем, он это сделает, ибо POST запрос будет сформирован в соотвествии с вашим требованием, только сложно было бы понять в чём дело, но теперь думаю это уже известный метод.
А от штатных ботов, думаю защитит.
0
DnV #
Автор думает, что открыл Америку? Это же самая старая и простая каптча. Хотя так скорее вы выполняете проверку не человек/компьютер, а браузер/парсер.
0
lumian #
как по мне, самая нормальная каптча — это recaptcha ;) поставил — не одного бота, комментария и т.д. пользователи особо не жалуются на нее…
0
Ekkertan #
Способ действительно хороший. Очевидный и простой. От штатных ботов защитит, да. Ну, а с более продвинутыми стоит, ИМХО, разбираться в индивидуальном порядке: универсальной защиты от всего все равно не бывает (а как хотелось бы! :) )

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