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

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

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

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

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

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

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

CaptchaImage

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

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

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

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

идеи?

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", то я отмечаю его как спам. Если значение antispam является целым числом, я проверяю, находится ли оно выше 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 из них, достижение spambot разблокировано, до свидания;)

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



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

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

кто-то придется их написать.

вы можете делать простые вопросы так же, как 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'   

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

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

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

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

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

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

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


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

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


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

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


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


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

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

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


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


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

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;
}

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


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

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

Е. Г. ssdfa поtwerweajhcсадkoghvefdhrffghlfgdhowfgh

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

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

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

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

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

лучшее управление CAPTCHA (посмотрите Ma - нет изображения!)

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

вы можете просмотреть источник и увидеть, что CAPTCHA - это просто 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

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

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

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

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

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

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

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


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


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

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

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


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

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

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

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


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

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

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


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

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


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

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

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


сделайте запрос 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) человеческие решатели

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

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

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

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

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

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

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

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

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

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

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


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

Captcha

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


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

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

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

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