Практические подходы, основанные не на изображении CAPTCHA?


похоже, мы будем добавлять капчу поддержка переполнения стека. Это необходимо для предотвращения ботов, спамеров и других вредоносных действий по сценарию. Мы только хотим, чтобы люди публиковали или редактировали вещи здесь!

мы будем использовать JavaScript (jQuery) CAPTCHA в качестве первой линии обороны:

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

преимущество такого подхода заключается в том, что, для большинство людей, капча никогда не будет видно!

однако для людей с отключенным JavaScript нам все еще нужен запасной вариант, и именно здесь он становится сложным.

Я написал a традиционное управление капчи для ASP.NET который мы можем повторно использовать.

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

Я видел вещи как..

  • ASCII text captcha://(_)//
  • математические головоломки: что такое 7 минус 3 раза 2?
  • простые вопросы: что вкуснее, жаба или эскимо?

может быть, я просто наклоняюсь к ветряным мельницам здесь, но я хотел бы иметь менее ресурсоемкий, не основанный на изображении <noscript> совместимая капча, если это возможно.

идеи?

30 318

30 ответов:

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

<input type="hidden" name="antispam" value="lalalala" />

затем у меня есть фрагмент JavaScript, который обновляет значение каждую секунду с количеством секунд, в течение которых была загружена страница:

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

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

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

теория такова:

  • спам-бот не будет поддерживать JavaScript и представит, что он видит
  • если бот поддерживает JavaScript, он отправит форму мгновенно
  • комментатор, по крайней мере, прочитал часть страницы раньше публикация

недостатком этого метода является то, что он требует JavaScript, и если у вас нет JavaScript включен, ваш комментарий будет помечен как спам, однако, я просматриваю комментарии, помеченные как спам, так что это не проблема.

ответ на комментарий

@MrAnalogy: подход на стороне сервера звучит довольно хорошо и точно так же, как это делается в JavaScript. Хорошая Идея.

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

Если я чего-то не хватает, что плохого в использовании reCAPTCHA так как вся работа делается внешне.

просто мысли.

преимущество такого подхода заключается в том, что для большинства людей, капча никогда не будет видно!

Мне нравится эта идея, разве мы не можем просто подключиться к системе rep? Я имею в виду, любой, кто говорит +100 rep, скорее всего, будет человеком. Поэтому, если у них есть репутация, вам даже не нужно ничего делать с точки зрения капчи.

тогда, если их нет, то отправьте его, я уверен, что это не займет много сообщений, чтобы добраться до 100 и сообщества будет мгновенно нырять на кого-то, кажется, спам с оскорбительными тегами, почему бы не добавить ссылку "сообщить спам", что downmods на 200? Получить 3 из них, спамбот достижение разблокировано, до свидания;)

редактировать: Я должен также добавить, мне нравится математическая идея для не-image CAPTCHA. Или, может быть,простой загадка-типа-вещь. Может сделать публикацию еще более интересной ^_^

избежать худшие капчи всех времен.

мелочи в порядке, но вам придется написать каждый из них: - (

кто-то пришлось бы писать их.

вы могли бы сделать простые вопросы таким же образом ReCaptcha делает печатные слова. Он предлагает два слова, одно из которых он знает ответ, другое, которое он не знает - после достаточного количества ответов на второе, он теперь тоже знает ответ на это. Спросите две мелочи вопросы:

женщина нуждается в мужчине, как рыба нуждается?

оранжевый оранжевый оранжевый. Тип зеленый.

конечно, это может быть связано с другими методами, такими как таймеры или вычисленные секреты. Вопросы должны быть повернуты / удалены, поэтому, чтобы сохранить запас вопросов, вы можете добавить ad-hoc:

введите свой очевидный вопрос:

вам даже не нужен ответ; другие люди поймут это для вас. Вы можете позволяет пометить вопросы, как "слишком жесткий", как этот: "впрыска ejflf АСЛ;И. Ф. ЭИ;фильм;asfas".

теперь, чтобы замедлить кого - то, кто работает с игровым ботом StackOverflow, вы бы повернули вопросы по IP-адресу-так что тот же IP-адрес не получит тот же вопрос, пока все вопросы исчерпаны. Это замедляет создание словаря известных вопросов, заставляя человека-владельца ботов отвечать на все ваши простые вопросы.

Я видел это однажды на сайте друга. Он продает его за 20 баксов. Это искусство ASCII!

http://thephppro.com/products/captcha/

  .oooooo.         oooooooo 
 d8P'  `Y8b       dP""""""" 
888      888     d88888b.   
888      888 V       `Y88b '
888      888           ]88  
`88b    d88'     o.   .88P  
 `Y8bood8P'      `8bd88P'   

капча, в ее нынешней концептуализации, нарушается и часто легко обходится. Ни одно из существующих решений не работает эффективно - GMail удается только в 20% случаев, в лучшем случае.

на самом деле это намного хуже, так как эта статистика использует только OCR, и есть другие способы обойти это - например, прокси-серверы CAPTCHA и фермы CAPTCHA. Недавно я выступил с докладом на эту тему в OWASP, но ppt еще не в сети...

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

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

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

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

опять же, не весь ваш спам (и другой мусор) будет сгенерирован компьютером - с помощью прокси-сервера CAPTCHA или фермы у плохих парней могут быть реальные люди, спамящие вас.


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

у фермы капчи есть много дешевых рабочих (Индия, Дальний Восток и т. д.), решающих их... обычно между 2-4$ за 1000 капча решена. Недавно видел публикацию для этого на Ebay...

Итак, капча обязательна для всех пользователей кроме модераторов. [1]

Это невероятно глупо. Так что будут пользователи, которые могут редактировать любой пост на сайте но не пост без капчи? Если у вас достаточно репутации для понижения сообщений, у вас достаточно репутации для публикации без капчи. Сделайте его выше, если вам нужно. Кроме того, есть много методов обнаружения спама, которые вы можете использовать без распознавания изображений, так что это даже незарегистрированным пользователям никогда не придется заполнять эти богом забытые формы капчи.

убедитесь, что это не что-то Google может ответить хотя. Что также показывает проблему с этим-порядок операций!

Как насчет использования самого сообщества, чтобы дважды проверить, что все здесь люди, то есть что-то вроде паутины доверия? Чтобы найти один действительно достойных доверия человек, чтобы начать веб я предлагаю использовать эту капчу, чтобы убедиться, что он абсолютно и 100% человек.

Rapidshare капча - Римана гипотеза http://codethief.eu/kram/_/rapidshare_captcha2.jpg

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

Asirra это самая очаровательная капча когда-либо.

просто заставьте пользователя решить простые арифметические выражения:

2 * 5 + 1
2 + 4 - 2
2 - 2 * 3

etc.

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

import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby

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

Я использую следующую простую технику,это не является надежным. Если кто-то действительно хочет обойти это, легко посмотреть на источник (т. е. не подходит для Google CAPTCHA), но он должен обмануть большинство ботов.

добавить 2 или более полей формы такой:

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

затем используйте CSS, чтобы скрыть их:

.hideme {
    display: none;
}

при отправке проверьте, есть ли в этих полях формы какие-либо данные, если они не выполняют запись формы. Рассуждение заключается в том, что боты будут читать HTML и попытка заполнить каждое поле формы, в то время как люди не будут видеть поля ввода и оставить их в покое.

хотя мы все должны знать основы математики, математическая головоломка может вызвать некоторую путаницу. В вашем примере я уверен, что некоторые люди ответят "8 "вместо"1".

подойдет ли простая строка текста со случайными символами, выделенными жирным или курсивом? Пользователю просто нужно ввести полужирные / курсивные Буквы в качестве капчи.

например. s sdfatwerweajhcсадkoghvefdhrffghlfgdhowfgh

в этом случае "стек" будет капча. Очевидно, что существует множество вариаций этой идеи.

Edit: примеры вариаций для решения некоторых потенциальных проблем, связанных с этой идеей:

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

несмотря на это похожие обсуждения начато:

мы пробуем это решение на одном из наших часто добываемых данных приложений:

лучший контроль капчи (смотрите Ma-NO IMAGE!)

вы можете увидеть его в действии на нашем Поиск Инспекций Зданий.

вы можете просмотреть источник и увидеть, что капча-это просто HTML.

Я знаю, что никто не будет читать это, но что насчет собака или кошка капчу?

вы должны сказать, какой из них кошка или собака, машины не могут этого сделать.. http://research.microsoft.com/asirra/

- Это круто..

Я просто использовать простые вопросы, на которые каждый может ответить:

какого цвета небо?
Какого цвета апельсин?
Какого цвета трава?

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

Мне лично не нравится CAPTCHA это вредит юзабилити и не решает проблему безопасности, делая действительных пользователей недействительными.

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

Davies, N., Mehdi, Q., Gough, N.: создание и визуализация интеллектуальный NPC с использованием игровых движков и инструментов AIhttp://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06.pdf

Golle, P., Ducheneaut, N.: предотвращение ботов от игры в онлайн-игры

Ducheneaut, N., Moore, R.: социальная сторона игр: изучение моделей взаимодействия в многопользовательской онлайн-игре

Конечно, большинство из этих ссылок указывают на обнаружение ботов видеоигр, но это потому, что это была тема статья нашей группы под названием Робот Войны: В игре исследование идентификации робота. Это не было опубликовано или что-то еще, просто что-то для школьного проекта. Я могу отправить по электронной почте, если вы заинтересованы. Дело в том, что даже если он основан на обнаружении ботов видеоигр, вы можете обобщить его в интернете, потому что есть пользователь, привязанный к шаблонам использования.

Я согласен с методом MusiGenesis этого подхода, потому что это то, что я использую на своем сайте, и это работает вполне прилично. Невидимый процесс CAPTCHA является достойным способом блокировки большинства скриптов, но это все еще не мешает сценаристу перепроектировать ваш метод и "подделать" значения, которые вы ищете в javascript.

Я скажу, что лучший метод-это 1) установить пользователя, чтобы вы могли блокировать, когда они плохи, 2) определить алгоритм, который обнаруживает типичные шаблоны по сравнению с нетипичными шаблонами использования веб-сайта и 3) блокировать этого пользователя соответственно.

У меня есть некоторые идеи о том, что я хотел бы поделиться с вами...

первая идея, чтобы избежать OCR

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

http://www.planethost.gr/IdeaWithHiddenPart.gif

вторая идея, чтобы сделать его более простым

страница со многими словами, которые человек должен выбрать правильный. Я также создать этот, просто. Слова являются кликабельными изображениями, и пользователь должен нажать на правый.

http://www.planethost.gr/ManyWords.gif

третья идея без изображений

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

http://www.planethost.gr/ArrayFromDivs.gif

окончательная идея-я называю ее CicleCaptcha

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

http://www.planethost.gr/CicleCaptcha.gif

любая критика приветствуются.

Лучшая капча когда-либо! может быть, вам нужно что-то вроде этого для регистрации, чтобы держать рифф-Рафф вне.

недавно я начал добавлять тег с именем и идентификатором, установленным в"message". Я установил его в скрытый с помощью CSS (display:none). Спам-боты видят его, заполняют и отправляют форму. На стороне сервера, если текстовое поле с именем id заполнено, я отмечаю сообщение как спам.

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

Это работает очень хорошо для меня, и я еще не получил ни одного успешного спама. Тем не менее, я получаю гораздо меньше посетителей на мои сайты :)

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

достаточно просто, и это не будет трудно кодировать вокруг него. Я вижу здесь две угрозы:

  1. случайные спам-боты и человеческие спам-боты, которые могут их поддержать; и
  2. боты, созданные в игровой стек Переполнение

С помощью простой арифметики вы можете отбить угрозу №1, но не угрозу № 2.

Что делать, если вы использовали комбинацию идей captcha, которые у вас были (выберите любой из них - или выберите один из них случайным образом):

  • ASCII текст капчи: //(_)//
  • математические головоломки: что такое 7 минус 3 раза 2?
  • простые вопросы: что вкуснее, жаба или эскимо?

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

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

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

простой текст звучит здорово. подкупить сообщество, чтобы сделать работу! Если вы, как и я, считаете, что очки репутации SO измеряют приверженность пользователя к тому, чтобы помочь сайту добиться успеха, вполне разумно предлагать очки репутации, чтобы помочь защитить сайт от спамеров.

предложите + 10 репутации за каждый вклад простого вопроса и набора правильных ответов. Вопрос должен соответствующим образом удаляться (редактировать расстояние) от всех существующих вопросов и репутации (и вопрос) должен постепенно исчезнуть, если люди не могут на него ответить. Допустим, если частота отказов на правильные ответы составляет более 20%, то отправитель теряет одно очко репутации за неправильный ответ, максимум до 15. Поэтому, если вы зададите плохой вопрос, вы получите +10 сейчас, но в конечном итоге вы получите -5. Или, может быть, имеет смысл попросить выборку пользователей проголосовать за то, является ли вопрос captcha хорошим.

наконец, как и ежедневная rep cap, скажем, ни один пользователь не может заработать более 100 репутация, представив капча вопросы. Это разумное ограничение на вес, придаваемый таким вкладам, а также может помочь предотвратить спамеры от посева вопросов в систему. Например, вы можете выбрать вопросы не с равной вероятностью, а с вероятностью, пропорциональной репутации отправителя. Джон Скит, пожалуйста, не задавайте никаких вопросов: -)

сделать запрос AJAX для криптографического nonce к серверу. Сервер отправляет обратно ответ JSON, содержащий nonce, а также устанавливает файл cookie, содержащий значение nonce. Вычислите хэш SHA1 nonce в JavaScript, скопируйте значение в скрытое поле. Когда пользователь публикует форму, они теперь отправляют cookie обратно со значением nonce. Вычислите хэш SHA1 nonce из файла cookie, сравните со значением в скрытом поле и убедитесь, что вы создали этот nonce в файле cookie. последние 15 минут (memcached хорошо для этого). Если все эти проверки проходят, оставьте комментарий.

этот метод требует, чтобы спамер сел и выяснил, что происходит, и как только они это сделают, им все равно придется запускать несколько запросов и поддерживать состояние cookie, чтобы получить комментарий. Плюс они только когда-нибудь видели Set-Cookie заголовок, если они анализируют и выполняют JavaScript в первую очередь и делают запрос AJAX. Это гораздо, гораздо больше работы, чем большинство спамеров готовы чтобы пройти, тем более что работа касается только одного сайта. Самым большим недостатком является то, что любой, у кого отключен JavaScript или отключены куки, помечается как потенциальный спам. Это означает, что очереди модерации по-прежнему являются хорошей идеей.

теоретически это можно квалифицировать как безопасность через неизвестность, но на практике это отлично.

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

1) человеческие решатели

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

Я часто читал, что человеческие решатели капч нарушают законы. Ну, это написано теми, кто не знает, как работает эта (спам) индустрия.
Человеческие решатели напрямую не взаимодействуют с сайтами, которые Капчи они решают. Они даже не знают, с каких участков были взяты и отправлены капчи. Я знаю о десятках (если не сотнях) компаний или/и веб-сайтов, предлагающих услуги человеческих решателей, но ни одного из них для прямого взаимодействия с советами нарушается.
Последние не нарушают никаких законов, поэтому CAPTCHA solving является полностью легальным (и официально зарегистрированным) бизнесом компании. Они не имеют преступных намерений и могут, например, использоваться для дистанционного тестирования, исследования, концепция проверки правописания, prototypong и т. д.

2) контекстный спам

AI (искусственный интеллект) боты определяют контексты и поддерживают контекстно-зависимые диалоги в разное время с разных IP-адресов (разных стран). Даже авторы блогов часто не понимают, что комментарии от ботов. Я не буду вдаваться во многие детали, но, например, боты могут веб-создавать человеческие диалоги, хранить их в базе данных, а затем просто повторно использовать их (фраза за фразой), поэтому они не обнаруживаются как спам с помощью программного обеспечения или даже людей.

самый проголосовавший ответ говорю:

  • * " теория заключается в том, что:
    • спам-бот не будет поддерживать JavaScript и представит, что он видит
    • если бот поддерживает JavaScript, он отправит форму мгновенно
    • комментатор, по крайней мере, прочитал часть страницы раньше размещение"*

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

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

3) Концептуально Новый Подход

Извините, я удалил эту часть, как осаждают один

на самом деле это может быть идея иметь набор капчи, связанный с программированием. Например:

Captcha

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

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

чтобы перефразировать резюме из статьи jQuery:

  1. при создании контактной формы на сервер ...
  2. захватить текущее время.
  3. объедините эту метку времени, плюс секретное слово, и сгенерируйте 32 символа "хэш" и хранить его в виде файла cookie в браузере посетителя.
  4. храните хэш или метку времени 'token' в скрытом теге формы.
  5. когда форма будет отправлена обратно, значение метки времени будет сравниваться с 32-символьным "токеном", хранящимся в файле cookie.
  6. если информация не соответствует, или отсутствует, или если метка времени слишком стара, остановить выполнение запроса ...

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