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

Похоже, мы добавим поддержку 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.

Идеи?

Ответы

Ответ 1

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

<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();

Затем, когда форма отправлена, если значение антиспама по-прежнему "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: Я знаю, что этот метод подвержен прямым атакам, как я упомянул в в моем блоге. Тем не менее, он будет защищаться от вашего среднего спам-бота, который слепо подает мусор в любую форму, которую он может найти.

Ответ 3

Если мне что-то не хватает, что-то не так с использованием reCAPTCHA, поскольку вся работа выполняется извне.

Просто мысль.

Ответ 4

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

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

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

EDIT: я должен добавить, мне нравится математическая идея для неизображения CAPTCHA. Или, может быть, простая загадка. Может сделать даже интерес интереснее ^ _ ^

Ответ 6

Избегайте худших CAPTCHA всего времени.

Общая информация в порядке, но вам нужно написать каждый из них: - (

Кто-то должен их написать.

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

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

Оранжевый оранжевый апельсин. Введите зеленый цвет.

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

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

Вам даже не нужен ответ; другие люди подумают об этом. Возможно, вам придется разрешать помечать вопросы как "слишком тяжелые", например: "asdf ejflf asl; jf ei; fil; asfas".

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

Ответ 7

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

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

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

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

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

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

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


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

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

Ответ 8

Я видел это однажды на другом сайте. Он продает его за 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'   

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

Ответ 13

Я использую следующую простую технику, она не надежна. Если кто-то действительно хочет обойти это, легко просмотреть источник (т.е. Не подходит для 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 и пытаться заполнить все поля формы, тогда как люди не будут видеть поля ввода и оставить их в покое.

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

Ответ 14

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

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

и др.

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

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

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

Ответ 15

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

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

например. s sdfa т werwe а JH с печально к oghvefdhrffghlfgdhowfgh

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

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

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

Ответ 16

Хотя эта аналогичная дискуссия была запущена:

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

Лучшее управление CAPTCHA (Look Ma - NO IMAGE!)

Вы можете увидеть это в действии на нашем Поиск осмотров зданий.

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

Ответ 17

Я знаю, что никто этого не прочитает, но как насчет собаки или кошки CAPTCHA?

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

Является крутым..

Ответ 18

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

Какой цвет неба?
Какой цвет оранжевый?
Какой цвет травы?

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

Ответ 19

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

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

Дэвис, Н., Мехди, Q., Гоф, Н.: Создание и визуализация интеллектуального NPC с использованием игровых движков и инструментов AI http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06.pdf

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

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

Конечно, большинство из этих ссылок указывают на обнаружение ботов видеоигр, но это потому, что это была тема нашего группового документа под названием Robot Wars: Инициатива по поиску роботов в игре. Он не был опубликован или что-то еще, что-то для школьного проекта. Если вы заинтересованы, я могу отправить электронное письмо. Дело в том, что даже если оно основано на обнаружении ботов видеоигр, вы можете обобщить его на Интернет, потому что пользователь использует шаблоны использования.

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

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

Ответ 20

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

Первая идея избежать OCR

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

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

Вторая идея, чтобы сделать ее более легкой

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

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

Третья идея с изображениями

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

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

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

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

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

Любые критики приветствуются.

Ответ 21

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

Ответ 22

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

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

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

Ответ 23

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

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

  • случайные спам-боты и человеческие спам-боты, которые могут поддержать их; и
  • боты, созданные для игры Stack Overflow

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

Ответ 24

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

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

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

Ответ 25

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

Captcha

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

Ответ 26

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

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

Ответ 27

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

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

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

Ответ 28

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

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

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

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

Ответ 29

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

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

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

2) Контекстно-зависимый спам

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

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

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

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

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

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

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

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

Ответ 30

Кто-то также предлагает библиотеку JavaScript Raphael, которая, видимо, позволяет вам нарисовать клиента во всех популярных браузерах:

http://dmitry.baranovskiy.com/raphael/

.. но это не будет работать точно с моим тегом <noscript>, не так ли?:)