Алеша Попович vs Тугарин Змей или как я боролся со спамом

    Все началось из того, что я захотел вести свой блог. Как старательный программист, я поставил на комментирование простую капчу для предотвращения спама. Но не тут то было… Капчу взломали… Дважды… Тогда я вышел из себя и решил отключить комментирование, до момента принятия какого-то решения.

    Заглянув под кат, я уверен, вы оцените его оригинальность.

    Стоя на голове


    Программировать или искать новую капчу мне помешал профессиональный навык, а именно ЛЕНЬ. В качестве оправдания я подумал, что как-то несолидно напрягать пользователей разбираться в непонятной буково-циферной куче символов.

    Было решено обратится к радикальным методам решения. А именно УБРАТЬ КАПЧУ (если подумать так жизнь станет легче сразу трем «персонажам»: моему серверу, спам-ботам и юзерам).

    В замен была создана простая бан-система по IP + пре-модерация комментариев. Все вроде хорошо, за исключением, что мне надоело банить ботов (на тот момент в базе к-во заблокированых IP приблизительно составляло 100). И тут скрипя зубами, стало ясно, нужно, что-то новое.

    Наблюдательность — залог успеха


    Понаблюдав за спам-комментариями дня 2, я заметил, что они (т.е. спам-боты) заполняют все поля, даже email, который не обязательный. Руководствуясь известной цитатой (сделай свои недостатки своим преимуществом), меня осенило.

    Следуя логичности верстки, я добавил еще один input c именем phone и с помощью JavaScript делаю его скрытым(можно и через CSS).

    Не долго пришлось ждать, чтобы увидеть, что спам-боты заполняют это поле, при чем только цифрами. Тогда в месте добавления комментариев добавляем проверку, если поле телефон заполнено, то это бот, если нет — доброжелательный юзер. Через пару дней я отключил, пре-модерацию, хотя бан-систему оставил на всякий случай.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 94
    • +25
      Гениально!
      • –13
        что гениального в простом добавлении поля в форме? :) автор нашел простой и удобный чит, вот и молодец )
        • +5
          Гениально своей простотой =)
        • +20
          Этому методу борьбы со спамом уже много лет. Можно сказать, точ прототип зародился еще до появления интернета. :)
          Если целенаправленно сайт не спамят, вполне защищают.
        • +3
          Задумка интересная. Будет работать до тех пор, пока кто-нибудь это не просечет и не настроит своих ботов специально для вас.
          • +3
            Мне кажеться, что если раз в неделю менять название поля, то устанут настраивать.
            • 0
              а вы название поля менять не устанете? :)
              • +6
                А кто-то заставляет делать это руками?
              • +1
                Можно сделать чтоб боты не заполняли скрытые поля.
                • +3
                  Если скрывать JS'ом, то они это не просекут.
                  • 0
                    Да, вы правы. Я подумал про вариант с css
                    • 0
                      Боты давно выполняют и css и js ;)
                      • +1
                        Накрыть блоком с цветом фона. Глаз, надеюсь, у них еще нет?
                        • 0
                          Есть. И блок с цветом фона палится за 1.5 секунды.
                          • 0
                            А блок с паддинг-марджин хайдом?
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • 0
                                Ну это да, тут уже костылять надо :(
                  • +1
                    У меня названия полей при каждой загрузке страницы меняются, но всё равно часть ботов пролазит, ибо они цепляются к настоящему браузеру и заполняют видимые поля. Притом что у меня ещё и js-защита стоит, а урл в форме комента фейковый. Лезут всё равно, суки.
                • +41
                  Поздравляю, вы открыли Honeypot Captcha, в этой статье возрастом почти в 4 года, хорошо описывается как и что haacked.com/archive/2007/09/11/honeypot-captcha.aspx
                  • 0
                    Нет ли подобной штуки в виде плагина для Wordpress?
                  • 0
                    возможно, но на Хабре об этом не много информации =)
                    • 0
                      Кхм...
                      Это наиболее содержательная статья из известных мне. Можно нагуглить и ещё парочку, если постараться.
                  • +9
                    Вроде это один из самых известных способов обмануть бота…
                    • 0
                      Экспериментировал подобным образом.

                      Работает до поры до времени. Потом — все больше спама проходит. К сожалению. :(
                      • +1
                        эксперименты разгневали спамовых богов :)
                      • 0
                        Скоро боты выйдут из под контроля, начнут само обучаться и загадят все интернеты спамом ))
                        • +1
                          У MODX есть стандартное расширение для обратной связи FormIt с такой защитой. Давненько уже, кстати.
                          • +2
                            алЬОша???
                          • 0
                            От ботов спасает, а от спамеров?)
                            • 0
                              а спамеров можно и забанить =)
                              • –4
                                Не проще премодерацию комментариев поставить?

                                + Ко всему спасет от display: none, visibility: hidden, text-indent: -9999px :)
                                • –7
                                  Минус за то, что вы тупорылые?!)
                                  • 0
                                    Сутки назад мы уже с тобой встречались и ты снова хамишь людям. Нравится оскорблять?
                            • +3
                              Методу сто лет в обед… Он даже используется в готовых движках из коробки, например в ShopCMS. Выше упоминали MODx
                              • +1
                                а я и не претендую на Нобелевскую премию =)
                                • 0
                                  Нет, то, что вы придумали его сами — это достойно. Но вот оригинальности под катом не оказалось. Это прискорбно
                              • +2
                                Методу возможно и сто лет в обед, но если автор допер до него своим умом — то честь ему и хвала. Правда красивое и простое решение.
                                • +8
                                  Ничего личного, но современный мир таков, что если между между «какая хорошая идея» и «я уверен, вы оцените оригинальность» открыть гугль, то можно увидеть, что особо никакой оригинальностью и не пахнет.

                                  Я похожую защиту использую уже несколько лет. Если интересно — выложу готовый код для wordpress.
                                  • +5
                                    понимаете… кто-то открывает гугль для решения проблемы, а кто-то напрягает мозги. 1-2 века назад математики изобретали одинаковые методы решения и ничего страшного =)

                                    Проблема в том, что я люблю изобретать, когда на это есть время. Это захватывает и мотивирует.

                                    P.S.: ничего личного, сам часто ищу решение в гугле
                                    • –6
                                      в данном случае вы изобрели изобретенный велосипед. причем сомнительного качества :)
                                      • +1
                                        У математиков была отмазка — отсутствие гугла.

                                        А у вас ее нет, к сожалению.
                                        • 0
                                          Вообще-то, напрягать мозги полезно, и потому, прежде чем писать про оригинальность стоит подумать и проверить, насколько это оригинальность.
                                          • 0
                                            Да Вы абсолютно правы. Но знаете… Статья вызвала очень много разных, эмоций и мнений. Суджу по тому, что моя карма еще ни разу так не прыгала то вверх, то вниз. Аналогично и с рейтингом статьи.

                                            По-этому можно сказать, что к-во людей которые знали и не знали о способе приблизительно одинаковое.

                                            Думаю статья все-таки имеет определенный процент полезности =)
                                            • 0
                                              Конечно имеет, а вот рейтинг и карма, как раз и скакали из-за способа подачи информации.
                                              • 0
                                                «Не результат, а путь главнее. Именно путь приносит радость» (из кин. Мирный Воин)
                                                • 0
                                                  Ну как пример — разработчику может быть важнее путь, а вот заказчику результат. Хотя успеха достигает чаще тот, для кого именно результат важнее. Что, кстати, не мешает наслаждаться путём его достижения.
                                            • +3
                                              Меня все больше возмущает, что за интересные статьи или работы по тематике на современном хабре возникают претензии и недовольства к автору. Но зато на всякую хрень половина сообщества реагируют положительно…
                                              Автор молодец, умеет думать и рассуждать. Материал представлен на хорошем уровне. (Уж извините любители острых шуток и поедателей красивой «воды»). Текста не много и по делу. Успехов автору в других интересных открытиях ;)
                                              • 0
                                                Претензии не за статью, а за то, что автор подал материал всем так, как будто это изобретение, о котором вы не знали. А для многих это просто обыденность.
                                                • +1
                                                  Спасибо за пояснение, я с ним согласен. Главное, чтобы про обыденность таких решений более опытные люди говорили не резко и не жестко. А то жалко, если у думающих людей будут отбивать интерес к обучению =)
                                                  • 0
                                                    Верно. Нужно чтобы радость открытий оставалась. Того, что ты сам придумал, а не подсмотрел.
                                          • +1
                                            Я похожую защиту использую уже несколько лет. Если интересно — выложу готовый код для wordpress.

                                            Выкладывайте.
                                            • –4
                                              А чего Вы так заинтересованы кодом? Алгоритм есть, реализуйте сами. Делается проще, чем капча. Да и к тому же, на своем велосипеде, пусть даже худшего качества, все равно легче кататься.
                                              • +1
                                                Автор предложил выложить сам, если кому интересно — я отозвался, ибо мне интересно.

                                                На своем велосипеде можно забыть прикрутить сидение и ходить с рваными штанами.
                                                • –3
                                                  Так раз руки-крюки, запаситесь штанами :)
                                                  • 0
                                                    Или же попрошу того, у кого руки в плане кода прямее моих, выложить этот самый код.
                                              • 0
                                                Там ничего сложного нет, но это работает
                                                kartz.ru/2011/04/14/stop-spam-wp/

                                                Опасаюсь, что после этой статьи такие методы защиты станут масовыми и спамеры ниучатся их обходить. Тогда придётся приделывать к велосипеду стол для блек-джека.

                                                Получается, что это даже хорошо, что каждый изобретает свой простой способ борьбы со спамом. Все способы простые, но они разные… И спамерам сложнее массово их обходить.

                                                Так что в этой области я ОДНОЗНАЧНО ОДОБРЯЮ ВЕЛОСИПЕДЫ. Хотя автор поста и не совсем оригинален — но свою задачу он успешно решил.
                                            • 0
                                              Т.е. капчу взломали дважды, и вы думаете что простейшее скрытое поле не взломают?
                                              • +1
                                                Разница в том, что ботоводам невыгодно настраивать свои программы под каждый сайт. А взламывать капчу — дело, поставленное на поток и усилий не отнимает.

                                                Я в свое время защитился от спама похожим способом — сделал флажок «Я не бот» в форме заполнения комментария.
                                                • –1
                                                  Интересно, я думал капчи нужно ломать каждую индивидуально. Ну или китайцам отдавать, тогда тип капчи не влияет… :)

                                                  И странно ещё что, действительно, этому способу уже много лет, ботописатели могли бы добавить распознавание медовых горшочков.
                                                  • 0
                                                    А как?

                                                    Проверять поля формы на скрытость? Лично я делаю несколько таких полей со служебной инфой, и javascript при заполнении в некоторые поля кое-что пишет.
                                                    Откуда боту знать, какое именно поле я буду проверять на заполненность?

                                                    Метод простой и прикольный, но не новый.
                                                    • 0
                                                      Ну да, обычно же это секретное поле заворачивают во что-то вроде
                                                      <div style="display: none;"><input name="haha_stupid_bot" /></div>
                                                      Бот может смотреть если поле расположено внутри блока с определённым стилем. Уже один из вариантов honey pot боту не страшен.
                                                      • 0
                                                        Дык я и говорю, что надо делать 5 инпутов с type='hidden' и всех делов.

                                                        Если заполняет человек, то 4 из них, нужных, заполнит javascript, а пятый — нет.
                                                        А если бот — то либо заполнит все, либо ничего.

                                                        Он же не знает, какое именно поле я проверю на заполненность? Тут можно много нафантазировать.
                                                        • 0
                                                          любой способ имеет как + так -. Например это можно обойти если написать бота на JS и заюзать броузер =)

                                                          но обычно так не делают
                                                          • 0
                                                            Да, это уже улучшенный honeypot :) Я имел в виду научить бота бороться с самым простым скрытым полем — просто не заполнять скрытое поле.
                                                            Если заполняет человек, то 4 из них, нужных, заполнит javascript, а пятый — нет.
                                                            … если заполняет бот без js. Что-нибудь на основе селениума по-идее должно обходить такие защиты — такой бот будет выглядеть почти как человек.
                                                          • 0
                                                            вы сами придумали про заворачивание в скрытый див или подсказал кто-то?

                                                            или input[type=hidden] {display:none;} в css кто-то отменил уже?
                                                            • 0
                                                              то есть [type=text]
                                                              • 0
                                                                Не помню где, но скрытый блок я где-то подсмотртел, возможно в Django, она например таким образом помещает в форму токен для защиты от CSRF. Кажется это имеет смысл — определить что поле скрытое по его атрибуту style проще чем парсить все родительские блоки и смотреть их стили.
                                                      • +1
                                                        Думаю ваш следующий ход это сделать флажок скрытым.
                                                    • 0
                                                      Хорошая идея пришедшая в голову это круто. Но можно было погуглить да. Хотя лучше, наверное, самому додуматься. Греет лучше.)
                                                      • –1
                                                        я думаю, что этот способ, в моем случае, оказался лучше за капчу =)
                                                        • 0
                                                          Хабр глюканул… коммент попал не в то дерево (
                                                        • –1
                                                          можно еще сделать шаблоны инпута и рандомно вводить их в скрытые поля, это должно усложнить самообучаемость…
                                                          • +2
                                                            метод в посте ниже, про время в сессию, будет эффективнее
                                                          • +2
                                                            Года 2-3 назад подумывали над такими системами защит. По мимо этой ещё есть хороший вариант при генирации формы ставить тайм штамп в сессию, а при получении формы сравнивать его с временем отправленной формы. Шанс, что пользователь введет форму за 2-5 секунд ничтожно мала.

                                                            П.с. Такой вариант стоит использовать без валидаторов на стороне сервера или же с дополнительными валидаторами на стороне браузера, что бы при повторной отправки формы с быстрым изменением ошибки в поле не перепутать юзера с ботом.
                                                            • 0
                                                              Ну, как вариант. Хотя спам-боты тоже не стоят на месте в развитии. У меня, например, это — один из десятка признаков на спам, и все равно периодически идет протечка: один-два из тысячи примерно.
                                                              • 0
                                                                А как же этот плагин, который реально постоянно подпиливается и даже от «человеческих комментариев» защищает? parasite-eliminator.ru/bloggers/magic/
                                                                • +2
                                                                  Последняя версия 0.849 от 29.11.2008.
                                                                  Не похоже на «постоянно подпиливается».
                                                                • 0
                                                                  лучше бы акисмет пользовали. Лучшая защита от ботов — краудсорсинг.
                                                                  • 0
                                                                    Вы открыли honeypot.
                                                                  • –1
                                                                    Я давным-давно добавил такое же скрытое поле, только назвал его «Url». Но зачем так палить контору и афишировать лишний раз этот метод? Чтобы авторы ботов приналегли на разработку обходных путей?
                                                                    • 0
                                                                      Почему вы считаете авторов ботов тупыми? Им известно об этом методе давно. Сейчас боты скачивают параллельно еще и js/css, отыскивая в них конструкции, связанные со всеми элементами атакуемых форм.
                                                                      • 0
                                                                        «Приналечь» — не значит открыть для себя этот метод. Это значит выделить на его обход больше ресурсов. Так что, пожалуйста, не приписывайте мне утверждений, которых я не делал, относительно их тупости.

                                                                        Я знаю, что боты пытаются парсить css и js.

                                                                        Но описанный метод до сих пор работает на всех моих сайтах, а значит, спамеры все еще недостаточно уделяют внимания этой области. И хочется, чтобы это продлилось как можно дольше.
                                                                    • –1
                                                                      А зачем вообще поле скрывать? Как говорили древние — лучший тайник это тот, что на виду. Достаточно оставить открытым, просто пометить его необязательным к заполнению — как обычно делают в формах, подсвечивая обязательные поля, или меняя цвет названия поля, и тп. Уверен, что никто из человеков не будет оставлять реальный телефон или париться чтобы ввести набор цифр в необязательное поле. А вот бот, как вы заметили, будет заполнять все.
                                                                      Профит — не надо бояться ботов наученных не реагировать на скрытые поля.
                                                                      • +1
                                                                        " Уверен, что никто из человеков не будет...", — как же завидую вашей уверенности!

                                                                        Я-то, в массовых проектах, всегда страдаю, пытаясь удовлетворить всю аудиторию, а не только те ~10%, о которых имею более-менее сносное представление.
                                                                        • –1
                                                                          Вообще-то интернет не вчера пришел в массы, и остальные 90% вашей аудитории совсем не гламурные секретарши готовые на всех подряд форумах оставлять свои телефоны/адреса/номера кредиток. Хотя было бы интересно провести эксперимент — на каком-то ресурсе проверить сколько пользователей все-таки оставят свои телефоны или другую личную информацию, не требующуюся для регистрации.
                                                                        • +1
                                                                          «Если есть люди, которые в солнечный день смотрят на людей в бейсболках, которые ганяют шарик по полю, то поверьте 100% найдутся люди, которые днями на пролет будут смотреть суицид по кабельному».
                                                                                                                                                                                       Джон Карлин
                                                                        • 0
                                                                          Есть способ проще. Боты обычно обращаются напрямую к файлу, содержащему форму комментариев, а пользователи обращаются к ней через страницу с постом. Запрет прямого обращения к файлу с формой такой же древний метод, как ваш.
                                                                          • 0
                                                                            Хехе, все гениальное просто :)

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

                                                                            Интересные публикации