Pull to refresh

Comments 74

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

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

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

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

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

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

то, что боты замечательно работают с javascript я уже давно выяснил на собственном опыте :(
Ну что бы написать хорошую защиту надо смотреть со стороны. Вот например вы использовали защиту на javascript, все красиво, работает, но к примеру я буду видеть что вот тут у вас функция дешифровки скрытого поля на XOR шифровании и мне ничего не стоит её реализовать вместо того что бы использовать полноценный парсер javascript. Тут надо учитывать что сложность защиты != ее стойкости.
защитой от ботов я занимаюсь вынужденно. т.е. вот, привалило всякой фигни, смотрим что бы с ней сделать. сначала спам в мыло, потом в формы. ну и так потиху избавился от всего этого. благо сайт не тот, под который кто-то стал бы персонально писать бота.
Ну это не так плохо как кажется, скорее всего работают комбайны типа хрумера, так что достаточно будет поля назвать по другому (не url а iddqd например).
тот же хрумер обучается.
Да уж конечно не только для гадостей много для чего. Мне например просто автоматизировать действия удобно некоторые, например хочу оплату через 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 минут, надеюсь, этот пост кому-то сэкономит время. Либо я узнаю в чем ошибся :)
Only those users with full accounts are able to leave comments. Log in, please.