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

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

Когда я писал парсер, я страницу преобразовывал в XML и работал с ней через XPath.
А вообще надо писать парсер на основе браузера и тогда на все пофиг будет.
selenium rc + phpunit например :) довольно интересный парсер выходит
Не тяжеловат будет? :)
тяжеловат, зато результат адекватный всегда и геморроя меньше. хотя тяжелость зависит от сервер, где это крутится :)
Я свой парсер писал во времена php 4 и тогда слова DOM не знал вовсе, думаю не у меня одного парсер на регулярках :)
Это будет работать, если веб-страница well-formed, т.е все тэги корректно вложены и правильно открыты/закрыты
я в своем парсере всегда делаю html_entity_decode :) т.к. часто встречаються нужные данные, которые в таком виде, не очень удобно читать.
Ну, если Ваш парсер такой… простой, то нет надо думать, что и остальные такие же. Понимать энтити — это базовое умение любого парсера, думаю, и спамерские это прекрасно умеют.

Кстати, и remal выше совершенно прав насчёт использования готового браузерного движка.
Если так думать то любая защита примитивна, да можно обойти любую защиту (благо имею опыт в этом деле). Но в некоторых случаях лучше поставить защиту «от дурака» чем нервировать пользователя. А этот вариант мне кажется достаточно красивым.
Спамят обычно всякие школьники, поэтому парзеры у них соответствующие.
Откуда такая статистика?
Кто еще будет спамить ссылками, скрытыми в <div style=«display: hidden;» >? Ясно же, что поисковики такое сразу определяют. А спамят и очень много.
поисковики определяют что?
Школьники спамят чем?
причем тут чем спамят?
я про «поисковики такое сразу определяют». какое такое? О_о
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
хороший способ… возьму на заметку, буду пользовать в комплексе со способом топика.
А потом без яваскрипта ваш сайт не отображается вовсе. Клево. Шикарно.
Зачем так категорично? Нет яваскрипта будте добры, проходите тест Тьюринга.
Да но откуда возьмется сама форма, если она в JS-файле?
Ну после капчи её можно показать и в HTML :)
НЛО прилетело и опубликовало эту надпись здесь
За хамство не сочту, но к чему вы привели этот код я не понял. Он будет работать при выключенном JS?
НЛО прилетело и опубликовало эту надпись здесь
Я спросил откуда возьмется форма если отключен JS, а сама она в JS-файле лежит, по-моему по контексту ветки это должно быть понятно.

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

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

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

отдельный бот отдельно банится на раз, за редкими исключениями. только сначала еще надо такой сайт сделать, чтобы под него отдельного бота стали писать…
я занимаюсь защитой от ботов, а не их написанием :)

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

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

Он работает со скоростью браузера (то есть в разы медленнее парсера), но умеет все то же самое, что умеет браузер, и любая защита, настроенная на скрытые поля и прочие вещи, которые, теоретически, парсер не умеет, обходится им на раз.
Да я согласен, просто у меня не получилось обойти flash защиту с его помощью, хотя в самом IE все работало.
Медленный? Честно скажу, пробовал Mozilla движок, раз в десять медленнее для анализа данных получалось (правда это было года два назад, все могло измениться). Правильная работа дело рук программиста:)
теперь все, у кого это не было реализовано, — реализуют.
и боты начнут и их парсить…
С первого раза не понял, но дочитывая комменты весь прикол в том, чтоб вставлять xml entities.
Я не думаю, что роботы настолько наивны не понимать их.
Но дело в том что если какой нибудь злостный хаккер захочет написать вам стопицот комментариев скажем, он это сделает, ибо POST запрос будет сформирован в соотвествии с вашим требованием, только сложно было бы понять в чём дело, но теперь думаю это уже известный метод.
А от штатных ботов, думаю защитит.
Автор думает, что открыл Америку? Это же самая старая и простая каптча. Хотя так скорее вы выполняете проверку не человек/компьютер, а браузер/парсер.
как по мне, самая нормальная каптча — это recaptcha ;) поставил — не одного бота, комментария и т.д. пользователи особо не жалуются на нее…
Способ действительно хороший. Очевидный и простой. От штатных ботов защитит, да. Ну, а с более продвинутыми стоит, ИМХО, разбираться в индивидуальном порядке: универсальной защиты от всего все равно не бывает (а как хотелось бы! :) )
Насколько я проверил в Firefox 20 и Chrome 26 под Ubuntu — обещанную конвертацию браузеры не делают.
На входе в форме имею:
<input id="search_char" name="search[char]" value="&ordm;" type="hidden">
При передаче контроллеру в логах получается:
Started POST "/ru/searches" for 127.0.0.1 at 2013-06-28 08:54:23 +0300 Processing by SearchesController#create as HTML Parameters: {"utf8"=>"✓", "search"=>{"query"=>"bla-bla-bla", "char"=>"&ordm;"}}
Потратил на внедрение этого псевдоспособа 40 минут, надеюсь, этот пост кому-то сэкономит время. Либо я узнаю в чем ошибся :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории