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

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

    P. S. пример
    P. P. S. Оказывается у меня тут в черновиках статья лежит про методы защиты от ботов и их обходы, стоит дописать?
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

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

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

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

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

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

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

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

                                                                  Он работает со скоростью браузера (то есть в разы медленнее парсера), но умеет все то же самое, что умеет браузер, и любая защита, настроенная на скрытые поля и прочие вещи, которые, теоретически, парсер не умеет, обходится им на раз.
                                                                  • 0
                                                                    Да я согласен, просто у меня не получилось обойти flash защиту с его помощью, хотя в самом IE все работало.
                                                                  • 0
                                                                    Медленный? Честно скажу, пробовал Mozilla движок, раз в десять медленнее для анализа данных получалось (правда это было года два назад, все могло измениться). Правильная работа дело рук программиста:)
                                                  • –1
                                                    теперь все, у кого это не было реализовано, — реализуют.
                                                  • 0
                                                    С первого раза не понял, но дочитывая комменты весь прикол в том, чтоб вставлять xml entities.
                                                    Я не думаю, что роботы настолько наивны не понимать их.
                                                    • 0
                                                      Но дело в том что если какой нибудь злостный хаккер захочет написать вам стопицот комментариев скажем, он это сделает, ибо POST запрос будет сформирован в соотвествии с вашим требованием, только сложно было бы понять в чём дело, но теперь думаю это уже известный метод.
                                                      А от штатных ботов, думаю защитит.
                                                      • 0
                                                        Автор думает, что открыл Америку? Это же самая старая и простая каптча. Хотя так скорее вы выполняете проверку не человек/компьютер, а браузер/парсер.
                                                        • 0
                                                          как по мне, самая нормальная каптча — это recaptcha ;) поставил — не одного бота, комментария и т.д. пользователи особо не жалуются на нее…
                                                          • 0
                                                            Способ действительно хороший. Очевидный и простой. От штатных ботов защитит, да. Ну, а с более продвинутыми стоит, ИМХО, разбираться в индивидуальном порядке: универсальной защиты от всего все равно не бывает (а как хотелось бы! :) )
                                                            • 0
                                                              Насколько я проверил в 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 минут, надеюсь, этот пост кому-то сэкономит время. Либо я узнаю в чем ошибся :)

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