22 июня 2008 в 00:53

Form Spam Bot Blocker: Защищаем Web-формы без CAPTCHA!



  • Вы так защитили свою форму что сами не всегда можете разобрать что нарисовала CAPTCHA?
  • Вы установили хорошую CAPTCHA и все равно время от времени у себя в feedback-е читаете новости
    о удлинителях некоторых органов, дешёвой виагре и т.п.?


Ну тогда предлагаю под другим углом взглянуть на проблему защиты Web-форм.


Я предполагаю, что вы уже знаете что такое CAPTCHA, возможно, многие из Вас использует эту технологию в своих проектах.


Недавно я качал файл с rapidshare.com, там нужно указать буквы на которые прицеплен кот.

(правильный ответ 'X6VK').


Так вот, ни с первого ни со второго раза я капчу «не распознал». Неужели нету другого способа идентифицировать реального пользователя? Вероятно, он есть, но ведь rapidshare борется не с ботами а с хакерами, которые целенаправленно «пробивают» RapidShare.


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


Я против втягивания в эту «войну» пользователей сайта, ведь в случае с RapidShare я стал заложником «войны роботов» того что «защищает» и того что «пробивает».


Миф о «непробиваемости» CAPTCHA


Проблемы взлома CAPTCHA хорошо описал Владислав Мысла. Я советую скептикам прочитать этот топик. Ниже я кратко перечислю основные акценты статьи.


Нету смысла останавливаться на программных уязвимостях при реализации CAPTCHA, когда разработчик забывает о том, что


  • время существования сессии должно быть ограничено
  • после получения формы, сессия должна быть немедленно удалена
  • надо проверяйть полученные данные на пустые значения



Основной способ обойти CAPTCHA — это ее распознать. На сегодняшний день уже существует много проектов, занимающихся исключительно распознаванием CAPTCHA. Наиболее известными из них являются два: “UC Berkeley Computer Vision Group” и “PWNtcha”. Степень успешного распознавания у обоих проектов достаточно высока (список CAPTCHA, который уже сейчас научились распознавать).


Для очень сложной CAPTCHA СПАМ-еры практикуют использование человеческого ресурса. В процессе распознавания задействуют любителей бесплатного порно, которым предлагают ответить на CAPTCHA тест, для просмотра следующей фотографии или видео-ролика. Сам тест, выбирается из формы сервера, на который производится СПАМ-атака, ответ пользователя, соответственно вставляется в ту же форму. Схема очень проста в технической реализации, кроме того, любителей порно тоже хватает :).


На чем можно «подловить» Spam Bot


Год назад, копаясь в phpclasses.org, я наткнулся на довольно оригинальное решение на PHP, которое называется Form Spam Bot Blocker. Разработчик этого php-класса пошёл другим путём, его подход не требует никакого дополнительного ввода данных пользователем.


Эта методика базируется на том, как ведёт себя пользователь, а не на том, что он вводит. Класс создаёт /> теги с зашифрованными значениями или визуально скрывает поля (средствами CSS), которые видит СПАМ-бот. Комбинация нескольких методов может действительно свести с толку СПАМ-бот, даже если он только-что прочитал html код. Надо отметить, что никакие Capthca-, Session-, Cookie — или Javascript-основанные методы здесь не используются. Только чистый (x)html и маленькая вставка CCS.


Базовые идеи:


  1. Пользователь (человек или робот) должен иметь такой же IP и такой же http user agent ID, как на странице с HTML-формой, так и на странице-обработчике по методу POST или GET. Пользователь всегда сначала посещает страницу с HTML-формой, потом переходит на страницу обработчик, роботы так делают не всегда, так как они часто только обращаются к целевой странице с обязательными параметрами. Другими словами: страница, содержащая html форму, должна быть загружена перед тем, как передать параметры целевой странице (странице, которая принимает параметры. IP и браузер потребителя должен быть одинаковыми на обеих страницах.
    Spambot вынужден использовать такой же IP и агент ID, сканируя и нападая
     
  2. На пользователя не будут воздействовать скрытые теги, имена которых, меняются ежедневно.
    По сути дела, на пользователя они могли бы воздействовать, если бы, например, он зашол на страницу с формой в 23.57 а послал запрос в 0.06 (на следующий день), но есть простое решение этой проблемы. Еще одна ручная работа для робота использовать прескан (предварительное сканирование) html страницы, содержащей форму, и посылать запрос с просканированными параметрами. Ежедневное изменение скрытых имен параметров потребует от робота производить прескан html страницы перед нападением.
    Spambot вынужден предварительно сканировать форму в день нападения
     
  3. Форму нужно засабмитить в пределах определённого временного отрезка. Если время от загрузки формы до сабмита слишком мало или слишком большое то мы скорее всего имеем дело с роботом. Например, пользователь не может заполнить 6 полей менее чем за 2 секунды...
    Spambot вынужден засабмитить форму в пределах определённого временного отрезка,
    сканируя и нападая

     
  4. Spambot будет пробовать заполнить каждый элемент формы некоторым значением.
    Это лучше всего гарантируют успешный сабмит. Если стандартный input тег размещён в форме и визуально скрыт от пользователя средствами CSS, пользователь ничего не введёт в это поле. Но весьма вероятно, что spambot это не «просечёт» и заполнит это поле.
    Spambot вынужден идентифицировать элементы визуально скрытых форм ловушек и пренебречь ими, при нападении
     


Опыт использования Form Spam Bot Blocker



Несколько недель назад я поставил этот класс на достаточно посещаемый и нагруженый проект в моей организации. В день регистрируется более 1500-1700 «проваленых» попыток засабмитить форму ботом. При количестве легальных сабмитов около 1200-1400. Пока что процент спама достаточно низок (скорее всего не от ботов а от «тематических» спамеров), которые частично автоматизируют свой труд с помощью плагинов к браузеру.


Возможно, со временем и эту защиту будут «пробивать» многие боты. Но мне понравился подход, его можно модифицировать, доставить еще ловушек.


В очень ответственных формах можно комбинировать с CAPTCHA. Одно другому не мешает.


Как использовать этот клас


  1. Создайте необходимые теги на сранице содержащей форму
    1. Опционально установите значения «по-умолчанию» в исходном коде класса (public variables)
    2. Включите класс в ваш скрипт
    3. Создайте объект: $blocker=new formSpamBotBlocker();
    4. Опционально выполните public-методы или установите public-переменные для адаптации переменных по-умолчанию к вашей web-форме
    5. Выведете в вшей html-форме: print $blocker->makeTags();


    Проверте $_POST или $_GET массивы на предмет того, содержат ли они
    действительные (valid) параметры из html-формы
    if ($_POST){ // or $_GET
    	$blocker=new formSpamBotBlocker();
    	$nospam=false;
    	$nospam=$blocker->checkTags($_POST); // or $_GET
    		if ($nospam) print "Успешный sabmit"; // handle valid request
    		else print "Есть подозрение что это СПАМ-бот"; // handle invalid request
    } 
    


Олег Черний @apelsyn
карма
178,1
рейтинг 0,0
Разработчик
Похожие публикации
Самое читаемое Разработка

Комментарии (117)

  • 0
    и правда каптчи уже надоели. хорошая идея :)
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Пример с RapidShare был для того чтоб показать к чему котится технология Capcha.

        А вы что хотели почитать про Тест Тьюринга 2.0? Решение которое здесь описано подходит большинству сайтов, программисту нужно всего немного модифицировать код чтоб это не было "стандартное" решение и все.
  • +4
    Люблю конструктивные темы с аргументацией по пунктам. Спасибо.
  • 0
    Отлично, я тоже думал о таком, но не так комплексно подошел к проблеме :) Моя идея была в картинке 3*3 ячейки, в одной из которой стоит точка. Чтобы пройти фильтр ботов надо кликнуть по ячейке с точкой :) Реализовать можно на js+css
    • +3
      Это избавит хакера использовать распознавание капчи.
      А эффективность в 1/9 никого не смутит. Распознавание потребует больше ресурсов, чем восемь запросов впустую.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Может я чего-то не понял, но разве робот сможет кликнуть по нужной части изображения? А если сделать на flash? Непонятно, за что мне минус :)
        • НЛО прилетело и опубликовало эту надпись здесь
  • +3
    На самом деле, боты имеют способность достаточно быстро обходить любые широкораспространенные способы защиты от них. С другой стороны, подчас, даже не такие сложные, но нестандартные механизмы защиты для них составляют большую проблему. Так что для ресурса, который потенциально в ближайшее время вряд ли станет мишенью целенаправленной работы хакеров, я бы писал защиту индивидуально, пусть и не такую сложную.

    А если говорить о том, что сложнее всего распознать, то в голову приходит такой механизм:

    1. Поля формы позиционируются абсолютно, а порядок их следования в HTML коде документа выбирается случайным образом. Т.е. пользователь их видит всегда в одном порядке, а для машины, анализирующей код, они всегда в разном;

    2. Подписи к полям тоже позицианируются абсолютно, и порядок их следования в коде документа не соответствует порядку следования соответствующих им полей;

    3. Поле, формат которого можно проверить (например e-mail), каждый раз называется по-разному;

    4. Если в данном поле введено не то, что требуется, то форма заполнена некорректно и, как следствие, не проходит проверку.



    Как-то так, в общем. Это общие соображения.
    • –1
      1-2. Как влияет порядок отображения на то, какой бот-запрос отправлять на сервер?
      3-4. Перебрать десяток вариантов для бота не проблема.
      • 0
        Есть поле, например, содержащее e-mail. В тексте документа оно при каждом выводе формы называется случайным образом и располагается в случайном порядке (в коде документа, для пользователя же оно всегда визуально располагается на одной и той же позиции при помощи абсолютного позиционирования). Бот заходит получает документ, анализирует его, заполняет поля, отсылает результат на сервер. На сервере скрипт проверяет, соответствует ли стока, введенное в заданное поле формату адреса электронной почты. Если соответствует — велкам. Нет — возврат на форму, в которой поля расположены уже в другой последовательности.

        Хотя, конечно, облом, если полей в форме всего три-четыре. Тогда перебор наугад может быстро принести желаемый для бота результат. Косяк...
        • 0
          Какая разница в каком порядке в html идут поля ввода? Бот всё равно ищет их не по количеству символов от начала страницы, а скорее всего регуляркой по ID или Name.
          И разве боту сложно вводить нормальный формат E-mail адреса?
          Или я что-то не так понял?
          • +1
            В том-то и дело, что ID и Name генерируются сервером каждый раз случайным образом (например, вместо полей name, email, login поля могут называться S0938, B4593, T9872, а при следующей загрузке U3947, H62829, O43329 и т.п.). Сервер каждый раз знает, какие он поля сгенерировал, и ждёт ответа. Если в поле, в котором должен был быть e-mail находится не та строка, которая ожидается — перед нами бот (ну, или пользователь ввёл некорректные данные).

            А поля можно перемешивать для того, чтобы было сложнее отследить требуемое поле, а то его будет легко найти через DOM.

            Правда я уже придумал, как обойти свой же механизм защиты. :(
            • +1
              и как же? по < label for="" > ?
            • +1
              Это еще хуже, чем капча. Мыло придется каждый раз заново вводить, а не выбирать из предложенных вариантов автозаполнения.
            • 0
              Вот кстати сейчас ддя себя реализую этот способ, вместе с парочкой других, кидаю в форму пару левых полей, все имена полей - случайны. Пользователю плевать, а вот для спамбота, разобрать какие два поля из шести заполнять не надо, причем если их имена каждый раз разные - думаю трудновато будет.
  • +3
    По сути приведенная схема защищает лишь от случайного спама. Целенаправленная атака на конкретный сайт или данный класс в большинстве случаев будет иметь успех. Все эти алгоритмы легко обходятся, если мы их знаем. Поэтому для рапидшары это точно не подойдет.

    А для борьбы со случайным спамом мне всегда хватало одного скрытого поля.
    • 0
      Угу. За пять минут обходится.

      include "http.class.php";
      include "FormParser.class.php";

      $url = "http://datexp.com/linux/fsbb/live/example.php";
      $http = new http;
      $parser = new FormParser;

      $form = $http->GET($url);
      $parser->parseForms($form);

      // Если форм несолько ищет форму с заданными полями
      $postdata = $parser->GetPostdata(array("message"));

      $postdata['message'] = "Сообщение спам бота :)";

      $action = http::fixURL($url,$parser->action);
      sleep(rand(3,5));
      echo $http->POST($action,$postdata)

      * This source code was highlighted with Source Code Highlighter.

      Пример — http://jeck.ru/labs/nobot
      • 0
        Есть одно "но" вы знали где ловушка. Это все равно что коментировать дейсвия фокусника, когда вам уже рассказали секрет именно этого фокуса.

        Почему же вы не написали:
        $postdata['fsbb_key'] = 'Я спам-бот';
        $postdata['e92cbfd520b5d59aae33f3e1e'] = 'Я спам-бот';
        $postdata['mail'] = 'Я спам-бот';
        • 0
          Вы не правы. Единственное что я здесь сделал зная наверняка — пауза перед отправкой. И то потому что не хотел захламлять кодом который вычислял время заполнения формы с учетом скорости набора. Остальное готовые классы для эмуляции действий пользователя. Этот прием является типичной защитой "от дурака".

          >Почему же вы не написали:
          Посмотрите внимательнее

          $parser->parseForms($form);
          // Если форм несолько ищет форму с заданными полями
          $postdata = $parser->GetPostdata(array("message"));

          Это небольшой парсер HTML форм (демонстрация http://jeck.ru/tools/FormsParser/). Он сначала обрабатывает все формы на страницы, потом ищет форму в которой есть нужное поле. Как видите все ухищрения со скрытыми полями обходятся двумя строчками :)
          • 0
            Мне кажется мы говорим о разных вещах.

            Бот просканировал форму, откуда он знает какие там поля должны быть нормальными а какие невидимымы? А если я назову поле не "message"?

            Я говорю о боте а вы мне пытаетесь доказать что если человек проанализирует форму и напишет прогу то она может форму обойти. Да, может обойти, атакующий может и капчу обойти, я уже написал как.
            Ведь все секреты я Вам разказал, а откуда бот знает что надо 3 секунды подождать?
            • 0
              Я вам говорю что в вашей схеме много лишнего если вы хотите защититься от массового спама, если нет — смотрите код выше. Для задачи которую вы тут описываете достаточно было лишь а все остальное для чего? А ещё хватило бы переименовать message в sejwnxjtr и добились бы вы того же эффекта что и своим сложным подходом.

              >Ведь все секреты я Вам разказал, а откуда бот знает что надо 3 секунды подождать?

              Ну так я же вам объяснил что реальные скрипты вычисляют время задержки на основании кол-ва введенных данных.

              Вы бы лучше предложили какое нибуть эффективное решение для целенаправленного спама.
              • +1
                Ну что же попробуем без секрета фокуса:
                http://datexp.com/linux/fsbb/live2/examp…

                Я немного модифицировал класс.
                • 0
                  Уже гораздо лучше но есть замечания:

                  1. У пользователя может быть отключен js
                  2. У пользователя может быть отключен flash
                  3. Невидимый flash может обрезать FireWall (надо было указать не 1x1 размер все таки)

                  Ну и естественно это не безопасный способ.
                  http://jeck.ru/labs/nobot/
                  P.S. Если много раз жать F5 все таки выпадают невалидные сабмиты, видимо стоит какоето ограничение на число сабмитов в единицу времени.

                  P.S.S. Я ведь уже собирался спать!
                  • 0
                    Для всех перечисленых способов есть выход:
                    1. тег <noscript> и капча.
                    2. С флеш тоже если отрублен или версии ниже < такой-то - капча.
                    3. В данном случае флеш имеет указаный размер 1x1

                    Ведь 90% пользователей мы избавим от гемороя.
                    • 0
                      >Для всех перечисленых способов есть выход:
                      >1. тег и капча.
                      Чем спамбот и будет пользоваться.
                      • 0
                        Да, все верно, но тут можно капчу посложнее, т.к. пострадавших пользователей будет намного меньше.

                        А те пользователи, которые капчу, в виду сложности, не осилят предлагать установить свежий Flash или включить JS.

                        Ну а бот пускай попариться.
  • 0
    Интересный подход, сам о такой реализации плотно думал.
    Мне кажется зря вы выложили файлы у себя - регистрация помогает создателям оценить интерес к их продукту и мотивирует на поддержку и улучшение.
    • 0
      В статье есть ссылка на оригинал http://www.phpclasses.org/browse/package… можете загрузить с phpclasses, мне не хотелось "нагружать" читателей лишней работой.
      Лучшей "наградой" для автора будет развитие его идеи, и я надеюсь, что многие из Вас дополнят этот класс своими "ловушками" для ботов. Лицензия на Class LGPL. Каждый из Вас может его доработать.
  • 0
    мдя... а меня признают спамером по ссылке с примером =)))

    Но идея безусловно великолепная. =)
    • 0
      Там специально в качестве демонстрации поставлены очень строгие ограничения на время ввода (30 секунд), видимо вы не вложились в этот отрезок. Но это — не беда, в настройках класса вы можете выставить свои ограничения.
  • +8
    Говорят Владимир Владимирович Шахиджанян печатает со скоростью 83-и капчи средней сложности в минуту.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    У мня была идея насчёт софтового будильника для мобильных платформ с капчей. Ведь чтобы нормальную капчу распознать как минимум нужно продрать глаза. Материал хороший, спасибо, внедрю буквально на днях 8)
    • 0
      Образцы «мобильных платформ» придётся менять после каждого «тяжёлого утра», так как, по-моему, выключаться они будут весьма радикальным образом — об стену. :)
    • 0
      Если вы её воплотите - дайте знать. Мечтаю о такой.
    • 0
      Не совсем капча, но Pocket Alarm (WinMobile) позволяет сделать так, чтобы выключить сигнал будильника можно было только после решения простого математического выражения.
      • 0
        что надо, сенкс
  • 0
    Против точечной атаки на конкретный ресурс (или даже конкретную форму) эта штука неэффективна. Пример - rapidshare. Написать бота, который в конкретно указанной форме сломает эти 4 этапа защиты не составит труда.
    • 0
      Ой, да ладно, знаем ведь все зачем на рапидшаре такая хитрая капча =)
      • 0
        от вот таких вот программок http://www.dimonius.ru/dusd.php . На пользователей и обычной хватит..
        • +1
          Да не только и не столько. Эта капча говорит об одном: купите премиум-аккаунт =)
          • 0
            А то я съем вам моск...
            • 0
              И это работает :)
          • 0
            Как я уже говорил, для этих целей можно не менять алгоритм генерирования капчи, а юзать один не сильно приятный для глаз. Кроме того, у рапиды масса других способов привлечь к покупке премиумов, менять аглоритм капч для этого ей не нужно.
  • 0
    > ...удлинителях некоторых органов, дешовой виагре и т.п.?
    "дешевой" пишется через "е"
    • 0
      Спасибо, поправил. С грамотностью у меня проблемы.
      • 0
        "он зашол на страницу" замените, пожалуйста, на "он зашёл на страницу" )
        Очень пригодится Ваш пост, спасибо.
  • 0
    >Например, пользователь не может заполнить 6 полей менее чем за 2 секунды...

    Ну с этим не согласен. У меня стоит Roboform, я большие анкеты заполняю за мгновения
    • 0
      нарветесь несколько раз на сообщение "в сабмите формы отказано - вы похожи на бота!" и перестанете жать сабмит моментально после автозаполения. БУдете ждать хот секунд 5-10
  • 0
    Боты пишутся - в основном - под конкретный движок или сайт, и никакого труда не составит написать обход капчи, не являющейся аудио или визуальной. Все варианты с js, что я видел, да и как идея - очень посредственны. Пока ниодного нормальной замены привычной капчи я не увидел.
    • +1
      Я хочу заметить, что данное решение не является разновидностью капчи. Тест Тьюринга предполагает "втягивание" пользователя в процесс идентификации, я же не против такого подхода. Капча может быть оправдана только при защите очень важной формы, которой как правило, является регистрация нового пользователя.

      Любую капчу можно "пробить", вопрос только в цене одного сабмита, если ничего не помогает хакер может привлечь человеческий ресурс, в статье есть ссылка на грамотный обзор этого вопроса.
  • 0
    Распознать нормальную капчу в десятки раз сложнее, чем обойти перечисленные способы.
    • 0
      Не спорю, но и пользователю гораздо сложнее бота пользоваться сайтом.
      • 0
        Забороть нормальную капчу автоматически - задача очень сложная. И боту тут приходится туго, а человеку надо всего лишь немного присмотреться к картинке (я не говорю о тех капчах, которые намерено создают проблемы пользователю).
        Приведённые способы способны остановить разве что очень дубового бота, который ходит на случайные страницы и заполняет все встретившиеся формы некоторой инфой. По моему эффективность таких ботов самих по себе (если даже не вставлять им палки в колёса) оставляет желать лучшего.
  • 0
    зря вы это на Хабре запостили :) Чем больше народу использует эту штуку, тем больше спама будет сквозь нее проникать
    • +1
      Для того чтоб обезопасить себя от такой перспективы — добавьте в класс еще хотя бы одну небольшую изюминку, чтоб не было стандарта. И тогда бот будет "колотся". Измините немного код, добавте 2 невидимых поля, например. Пользователю на несколько байт больше трафика а боту прийдется воевать с вашими ловушками.

      Вместо style="display:none" поставте имя класса которое будет определено в css-файле как невидимое. А боту подсунте фиктивный инпут с style="display:none". Пусть ламает Вашу версию спамблокера. Кроме того доп-ловушки можно включать рандомом. Вы должны понимать что боты не имеют возможности видеть страницу как человек, боты не проанализируют Ваш CSS, вот на этом и надо их ловить.

      Главное правило — отойти от стандарта!
      • +1
        - поместите инпут в слой с позиционированием в "минусе" по вертикали.
        - поместите инпут на страничку и сделайте его ридонли и невидимым уже джаваскриптом на onload
        итд. Перебирать то можно долго.
        Но наиболее продуктивной все же мне кажется идея генерировать поля ввода , точнее их id каждый раз заново. те фактически в сессию юзера будет писаться идентификатор схемы, которая использована. после чего приложение будет разбирать что там ему прислали, и если имена полей не совпали - до свидания.
        • 0
          Но пользователь-то должен понимать, что куда вводить - значит, над реальными полями ввода будут осмысленные тексты-подсказки и класс в CSS у них будет отображаемый. Тогда робот тоже отсортирует поля ввода в порядке следования текстов-подсказок над ними (проанализировав CSS если нужно) - всяко для него анализировать HTML и CSS проще, чем распознавать картинку CAPTCHA.
  • 0
    Щяс лучше всего прокатит капча картинкой по которой надо щелкнуть в определённом месте, проблем для человека такая капча шибко уменьшит, а бота писать под нее сложней.
    • –1
      Бот может проанализировать HTML код (там будут все координаты)
      • 0
        поставить под капчей 9 рэдио баттонов, из которых часть отмечена, часть нет, задача - привести капчу и рэдиобаттоны в соотвествие.
        • 0
          Ещё проще, картинка - input type=image, мы получаем координаты щелчка.
    • 0
      Если роботы уже неплохо распознают искривленные и зашумленные буквы на картинках, то что им помешает эмулировать клик в нужной позиции?
      • 0
        Эмулировать клик им нечто не помешает, а вот в нужной позиции уже сложнее гораздо, т.к. что бы понять какая позиция нужно понимать язык.

        А если писать место клика не просто текстом, а впечатывать на изображение, то задача еще более усложниться.
        • 0
          Это та же задача, что и распознавание текста на captcha.
  • 0
    А не приведете статистику скольких людей такая капча тормознула?
    Статистику можно собрать, например собрав соответствия IP адресов в забаненых запросах и в нормальных. Хоть приблизительно.
    Я использую подобную штуку от MS. Работает нормально. Но только для ASP.NET.
    http://asp.net/AJAX/AjaxControlToolkit/S…
  • 0
    >> Щяс лучше всего прокатит капча картинкой по которой надо щелкнуть в определённом месте, проблем для >> человека такая капча шибко уменьшит, а бота писать под нее сложней.

    Даже если взять капчу 3х3, с точкой в одном из 9 квадратиков, и сделать таких три подряд - шанс проникновения бота уменьшится не втрое, а в восемь раз, но для человеческого фактора такие капчи не составят проблем (пробивание вречную)
    • 0
      3 подряд - это уже в 81 раз улучшится защита... А вообще если бот хочет просто завалить сервер ненужными данными, то ну и ладно - в несколько раз просто уменьшится удар, но удар, всё-таки, будет значительный. А если всего в 3 раза - то бот вообще может не волноваться :)
  • 0
    скрытые поля прикольна, однако нужно лишь чуть-чуть доработать спам-ботов для ее обхода. Хотя если повсеместно не использовать то будет норм.

    есть опыт когда с помощью JS пихал в инпут некий хеш. 90% ботов отсеялись сразу, хотя вместе с ними и 3% пользователей, т.к. ресурс региональной направленности, достаточно было создать белый список IP адресов, и решилось проблема 3-х процентов
    • 0
      преимущества и недостаток спам-ботов — они используют стандартные методы. Никто не будет фиксить ботов под сайт васи пупкина, другое дело когда боты пишуться специально под ресурс.

      на своем сайте я в открытую опубликовал емаил и аську, нету спама.
      На региональном портале дефолтное мыло принимает порядка 200-300 писем сомнительного содержания, а вместе с ним светится домен, страдают все
    • +1
      на мой взгляд эффективную защиту может обеспечить несколько правил.
      для своей доски объявлений использую автомод.
      по заданным правилам начисляются штрафные баллы, при превышении которых объявление не добавляется.

      список правил:
      1. черный список IP адресов
      2. Черный список IP-name
      3. проверка REFERER и URI
      4. база стоп-слов
      5. проверка "серых слов" (http, [url и т.д)
      6. проверка передаваемых хешей
      7. соотношение русских/английских букв

      каждое правило имеет определенные вес, суммирование все дает оценку объявления на основе которой принимается решение публиковать или нет подаваемое объявление.

      для примера — лимит поинтов равен 100, стандартное сообщение обычно набирает не более 50. для остальных можно создать белый список, либо минусование поинтов если юзер зарегистрировался в системе.
    • 0
      справедливости ради стоит отметить что спам прорывается все равно.
      но это практически единичные случаи, в день около 3-5 спамовых сообщений, откинутых более 500
  • 0
    А почему уважаемые веб-разработчики игнорируют проект recaptcha?

    Суть там в том, что для распознавания подсовываются именно такие картинки, которые уже заведомо отказались распознать лучшие, специально заточенные под них, программы (нераспознанные слова из оцифровываемых бумажных книг).

    Распознавая капчи, пользователи помогают оцифровывать те самые книги (т.е. работа по распознаванию не уходит впустую, идёт на пользу человечеству).

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

    А проблемы с задействованием человеческого ресурса (типа "эта же капча на порносайте") вполне сносно решаются, если recaptcha скомбинировать с описанной в хабратопике технологией.
    • 0
      все хорошо в меру. как только все поставят "рекапчу" ее тоже распознают и прокачают ботов.
      • 0
        Повторяю :) Как только появятся алгоритмы, которые её распознают - эти алгоритмы применят к распознаванию книг, и те картинки, которые могли бы быть распознаны, в рекапчу уже не попадут. Она автоматически регулируемая, то бишь распознанные классы из неё автоматически исключаются.
        • 0
          Тогда такой вопрос:
          Имеем схему:
          набор нераспознанных алогоритмами слов, который можно получить только используя человека для проверки правильности распознания
          картинки с их изображением
          человека, который снова распознает слово на изображении (ведь системе надо проверить, правильно ли распознано слово).
          Не кажется ли, что при такой схеме рекапча нисколько не поможет распознанию этих слов? )
          • 0
            Так и делают. Показывают эту капчу, скажем, на порносайте, "чтоб увидеть следующую картинку". Заонанировавшийся человек, который там обитает, он хоть и с плохим зрением - всё равно, её распознаёт для спаммеров.

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

            Кстати, мы имеем один или несколько центральных серверов рекапча, т.е. уже имеем некий центральный ресурс. Их же можно использовать и для ведения чёрных списков, откуда обычно приходят спаммерские распознавания, на манер spamhaus.

            Жопа у рекапчи одна - она всё сложнее и сложнее, потому, что распознавалки-то совершенствуются, и для человека остаются всё более и более сложные случаи. Существующие алгоритмы, кстати, зачастую даже умеют её распознавать, но очень неуверенно, и поэтому её всё же оставляют человеку (тем не менее, эти алгоритмы попросту недоступны спаммерам - ни сами алгоритмы, не мощности, необходимые для их реализации). А когда рекапча станет совсем сложной - придётся признать, что компьютеры догнали людей в области распознавания таких текстов :(
        • 0
          дык распознают, неважно котики, васьки или пупкины
          все зависит только распространенности
          • 0
            Вы явно не понимаете, в чём суть :) В рекапчу попадают как раз такие картинки, которые не были распознаны алгоритмами, специально разработанными как раз для их распознавания. Короче, не существует в природе программ, которые бы могли распознать рекапчу, по определению рекапчи. Если я своими словами объясняю непонятно - http://recaptcha.net/ - там по-английски, но от авторов и разработчиков.
            • 0
              Мы все понимаем, она хороша как красивая гуманная идея, но как защита от автоматической регистрации - не очень. По крайней мере от толпы лемингов на порносайтах точно не защитит.
        • 0
          как из анекдота
          на каждую хитрую ж..у
          находится х..й с винтом
    • 0
      А как проверять валидность такой капчи, если фраза на ней не известна? То есть "Распознавая капчи, пользователи помогают оцифровывать те самые книги ", значит что ответа еще нет, а боты могут подсовывать слова, примерно подходящие по длине, чем будут только засорять эти книги. Или я вас не так понял?
      • 0
        А вы пойдите на сайт проекта и прочитайте, как это работает :)

        Там показывается два слова, одно проверочное (уже распознанное), второе - новое. И есть средства, чтобы не отравляли систему, вводя проверочное правильно, а новое - как попало. А вообще, подробно принцип действия, серверные библиотки и прочее можно посмотреть на сайте проекта.
  • 0
    для той же рапидшары, блогов wordpress метод ничем не поможет, а для небольших сайтов, под которые никому нафик не нужно затачивать спам-бота - вполне сгодится, как и заполнение форм жаваскриптом.
    • 0
      для этих монстров любой алгоритм обречен на неудачу, а маленьким проектам, там даже не надо что то делать, достаточно предмодерации
  • 0
    Все это давно используется в плагине для wordpress spamkarma, и также давно обходится.
  • 0
    Комментарий к сабжу вылился в целый пост:

    Проблема CAPTCHA с философской точки зрения
  • 0
    Будучи администратором форума постоянно сталкиваюсь со спамерами и для себя понял следующее. Не может быть жесткого единого и универсального правила для отсечения ботов,потому что для этого правила будет создан бот. Следовательно, нужно создать определенный набор правил, которые будут случайным образом использоваться при регистрации. Думаю такой подход будет хорош и для крупных ресурсов. Но, что очень важно, не должно быть повторяемости набора правил для разных ресурсов, тогда будет значительно усложнен процесс преодоления защит. Как один из вариантов проверка на преодоление непримененного вида защиты. Короче, думаю, надо идти по пути усложнения.
    Опытным путем выяснил, что если на моем маленьком ресурсе, стоит вид защиты такой, которого нет у других, я могу с большой долей вероятности (примерно 99,99%) отсечь бота, что и делаю.
    Сумбурно выразил, но если интересно, могу и прокомментировать подробнее.
    • 0
      об чем и речь, специально под сайт ботов фиксить не будут (если это не уникальный ресурс с хорошим трафом)
      для своего форума тоже написал автомод. 90% спама на нем и оседают. Однако есть кучка людей которые вручную спамят форум, и от них никак не защитится
  • 0
    Самое интересное в другом - нет смысла уповать только на капчу. Есть много других способов обходить ботов, и выдумывать их необходимо, с креативным (простите за спорное слово) подходом. Если один и тот же метод используют сотни сайтов - боты начинают обучаться.

    У меня была идея, возможно громоздкая, но своя. Картинка 60 на 60 пикселей формируется из дивов 1 на 1 пиксель, каждому диву задается его место и цвет через css, а выдаются они случайным образом, каждый раз в разной последовательности. Главный минус - достаточно длинный код - всего должно быть 3600 дивов, у каждого свой цвет и позиция. Зато ботам не пробиться. До тех пор, пока затея не стала массовой.
    • 0
      креативным = творческим) Это не в упрёк - это так, на будущее)) Раз уж вы тоже считаете это слово спорным ;)
    • 0
      а сама защита в чем заключается?
  • 0
    Кстати, вот оригинальная капча: клик. Насколько она надежна?
    • +2
      пока символы идут слева направо - она не более надёжна чем просто текст на картинке. Она стала бы очень надёжной - если бы вы понатыкали букв вне кружков. Тогда задача для бота стала бы не такой тривиальной.
  • 0
    Что-то похожее, со скрытыми полями и использованием javascript, уже писалось ранее:
    способ защиты веб-форм от роботов
    Надеюсь, будет полезным :)
  • 0
    есть сервисы где народ за определенную плату на время вводит символы с картинок CAPTCHA
    в основном аттакуют MySpace
  • 0
    а есть сервисы где «всё за деньги»
    там и капча похоже не нужна — вот лекарство против ботов :-D

    разве что если кто захочет заддосить сервер…
  • 0
    С рапидой я пытаюсь так - смотрю где кошачий хвост есть - обычно угадываю :)
  • 0
    какой смысл писать на хабре то, материала о чем в интернете хоть жопой ешь?
    пропиарить php-классик чтоль?

    сложная captcha - против сложной логики внутри сервера? Я прекрасно понимаю почему крупные проекты используют именно первый вариант =).

    А вообще - почему бы не распозновать бота по действиям ПОСЛЕ регистрации?
    • 0
      Во всем видите коммерцию, нет я не сотрудник phpclasses, и не "сочувствующий"?

      Я в статье хотел показать альтернативный и эфективный способ решения проблемы борьбы с ботами на чистом html. Все что нужно немного модифицировать код, чтоб это небыло "стандартное" решение. 80% сайтов капча не нужна!

      Я не отрицаю комбинирование разных способов борьбы.

      Про капчу информации много, про альтернативные способы борьбы говорят намного меньше. Вы считаете эта тема никому не интересна? Почему же за нее голосовали?
      • 0
        http://www.google.com/search?client=oper…

        на самом деле я разозлился по целому ряду причин. Информации в инете достаточно, особенно качественной, в отличие от вашей стататьи. Вы хоть в курсе что CAPTCHA - это не изображение? Это автоматизированный реверсивный тест тьюринга. "Completely Automated Public Turing test to tell Computers and Humans Apart".
        • 0
          чтобы защищать, надо кстати уметь и ломать.

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

          иными словами - симитировать "механические" действия пользователя - проще простого. В этом случае разобрать автоматом картинку на рапидшаре мноооого сложнее. Смысл там прост: почти нереально разбирать автоматом картинки с процентом попаданий близком к 100. Самое лучшее - процентов 30-50 (даже и того меньше, в случае рапидшары). Тут уже айпи бота быстро "светится" уймой неверных попаданий.

          я уже говорил - самое лучше - не пытаться изо всех сил ловить ботов в начале, а дать им возможность зайти и уже потом пристально следить за первыми дейтсвиями. Тут отсев производить намного проще. Это если говорить о проектах где у пользователя после регистрации есть много вариантов будущих действий, а не только "ввести каптчу -> ткнуть на линк -> скачать файл".
          • 0
            Я так понимаю что вы умеете ломать. В таком случае покажите мастер-класс. Я сделал небольшую доработку и не использовал капчу. Я думаю среднему хакеру хватило бы 20 минут.
            http://datexp.com/linux/fsbb/live2/examp…

            Или вы только в теории мастер?
            • 0
              опачки )

              давайте тогда уж так. Завтра сделаю (или вы думаете actionscript выдрать из флешки - архипроблемно?) и если сделаю - вы навсегда перестанете писать об этом публично?
              • 0
                Я думал вы справитесь быстрее чем я написал.

                Тем более что метод защиты достаточно прост. Вы думаете боты будут выдирать ActionScript из flash и эмулировать его работу для каждого сайта с посещаемостью в 100 чел. в день?

                А если исходники ActionScript каждый вебмастер поправит по своему?

                А Вы часом не СПАМЕР, которому такие технологии мешают СПАМ-ить?
                • 0
                  мне казалось всем было понятно что мы говориле не о массовом взломе тонны сайтов с целью кражи траффика, а о направленном с целью кражи меньшего, но более качественного трафика на серьёзном ресурсе. В таком случае спамбота всегда пишут уникального. Более того - ну не глупо ли автоматом регестрироваться, если на сайте ни одной стандартной софтинки нет.

                  Мне ваш "тест" вообще по барабану, у меня и других дел полно. Будет свободное время - гляну ваш AS чтобы ухмыльнуться супер "защите". Кстати без флеша вообще не даст зайти? Уж лучше котов на картинке выглядывать.

                  Кто я такой вас волновать вообще не должно с точки зрения этикета данной беседы, и последним утверждением вы ставите себя в совсем некрасивое положение. Нет я не спаммер и никогда им не был. Нужно быть настоящим дебилом чтобы в подобных топиках делится своими мыслями, будучи спаммером.
                  • 0
                    Ну вы сами написали что все "ломается на раз-два". Я с этим не согласен и предложил это доказать на деле, а не на словах.

                    А по поводу flash, я уже ответил другому, констуктивно настроеному читателю.
  • 0
    Спасибо, в качестве общего развития почитал и класс посмотрел. Интересно, но, как и всё - не универсально... Но, в любом случае, мыслит создатель класса в правильном направлении - юзабилити - первоочерёдное.
    З.Ы. Самой непробиваемой капчей будет осмысленный вопрос, требующий осмысленного ответа - тогда скрипт уже просто не поможет. Хороший пример - русские пословицы на русских же сайтах.
    • 0
      Это хороший способ, но если за дело возметься специалист то обучит робота. Ну сколько тех пословиц 100, 200, 1000?

      Для бота это будет тупик, и этот способ будет эффективен.

      Я уверен, что хакеру под силу решить обход ЛЮБОЙ Капчи и ЛЮБОЙ защиты ввода данных на сайт, если этот ввод доступен обычному пользователю.

      Единственное на что вы можете влиять это "цена" одного сабмит-а, т.е. технические затраты, затраты ресурсов на один сабмит.
  • +1
    можно генерить новое скрытое поле формы со случайным значением с помощью зашифрованного js, а на сервере потом проверить на заполненность этого поля
    врядли кто из повседневных спамботов согласится на анализ js
    (решение для тех кому не интересны те, у кого отключен js)
  • 0
    Лучшая каптча. Для получения привилегий на пост на форуме необходимо отправить смс. При обнаружении spam-activity (флуд, повторный пост, визуальная проверка) привилегии удаляются.
    • 0
      >> Для получения привилегий на пост на форуме необходимо отправить смс >>
      Может лучше сразу в офис подъехать для получения привилегий. ;)

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