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

318

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

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

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

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

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

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

CaptchaImage

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

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

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

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

Идеи?

Jeff Atwood
источник
16
Нет необходимости создавать изображение на сервере. Вам просто нужно обработать запрос. Например, <img src = "generateImage.aspx? Guid = blah">
Брайан Р. Бонди
58
Вопросы викторины склонны к культурным предубеждениям (представьте себе французского парня, отвечающего на ваш вопрос ...). Кроме того, они могут работать с пользователями, чей английский не является родным. Кроме того, их можно легко сломать, используя грубую силу (у вас есть только ~ 2 ^ # _ опций OfQuestions).
Адам Матан
72
Кроме того, что на земле эскимо?
Фрейзер
57
Согласно Wolfram Alpha, «то, что 7 минус 3 раза 2» равно 1. Я думал, что это было 8. Я думаю, что вы только что изобрели анти-капчу.
Майк Робинсон
50
@Mike Robinson: Я думаю, что программисты должны знать о приоритете операторов в НОРМАЛЬНОМ дневном использовании =)
Gnark

Ответы:

205

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

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

GateKiller
источник
45
ВЕРСИЯ, КОТОРАЯ РАБОТАЕТ БЕЗ JAVASCRIPT Как насчет того, если вы сделали это с ASP и т. Д. И у вас была временная метка для времени загрузки страницы формы, а затем она сравнивалась со временем, когда форма была отправлена. Если ElapsedTime <10 секунд, то это скорее всего спам.
Клей Николс
28
Совершенно очевидно, что его можно обойти, если злонамеренный пользователь потрудится посмотреть на него. Хотя я уверен, что вы знаете об этом, я предполагаю, что вы предполагаете, что они не будут беспокоить ... Ну, если это не сайт какой-либо ценности, то вы правы, и они не будут беспокоиться - но если да, тогда они будут, и обойти это достаточно легко ...
AviD
48
Вот поворот на этом, который я использую. Сделайте скрытое значение зашифрованным временем, установленным сейчас. После отправки сообщения убедитесь, что прошло от 10 секунд до 10 минут. Это мешает обманщикам, которые пытаются подключить какое-то всегда действительное значение.
Тим Скотт
7
Всем, кто указал, что боты могут пройти ... Это я знаю, как я указал в ответе. Это очень простой способ остановить вашего обычного бота и скучающих пользователей. В настоящее время я использую его в своем блоге, и до сих пор он был на 100% успешным.
GateKiller
8
Я думаю, что лучше начать с простых обходных тестов, чтобы убедиться в их адекватности.
pbreitenbach
211

Моя любимая капча :

Защитный код

ceejayoz
источник
13
Это здорово. Ссылка на сайт является random.irb.hr/signup.php . Иногда это намного проще
Марсио Агиар
22
Единственная проблема заключается в том, что большинству людей это действительно трудно, но компьютеры обычно не имеют проблем с этим.
Тим Мэтьюз
7
Я считаю, что ответ на эту проблему -3?
dancavallaro
2
@ Эрик, не совсем. Это также поддерживает тех, кто имеет докторскую степень в области компьютерных наук, но не хочет беспокоиться.
BobbyShaftoe
28
-3 кажется правильным. Я помню, как использовал этот сайт для исследований некоторое время назад, и когда я добрался до капчи, я был очень счастлив, потому что это было весело и по-другому. Он предназначен для доступа к генератору квантовых случайных чисел с использованием фактического источника радиоактивного распада.
Алекс
57

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

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

thing2k
источник
17
Re-captcha враждебен к пользователю. Captchs достаточно плохо. Но усложнение для пользователей, чтобы получить какое-то крошечное преимущество OCR, положительно враждебно.
pbreitenbach
19
почему пользователь враждебен? спам удобен?
Эльзо Валуги
14
Это враждебно для пользователя, потому что иногда изображения трудно декодировать даже людям, и они могут вызвать разочарование у законных пользователей, когда это произойдет. Посмотрите на ссылку Джоша с худшими капчами, чтобы найти примеры слишком сложных для декодирования изображений.
Андрей Фирбинтеану
4
@ Андрей, вы всегда можете заставить reCAPTCHA загрузить другое изображение, если вам это слишком сложно.
Митца
23
С reCAPTCHA все в порядке, и в нем реализована опция доступности, о которой 95% отечественных решений даже не задумываются.
alxp
42

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

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

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

РЕДАКТИРОВАТЬ : Я должен также добавить, мне нравится математическая идея для CAPTCHA без изображения. Или, может быть, простая вещь типа загадки. Может сделать публикацию еще интереснее ^ _ ^

Роб Купер
источник
13
Что произойдет, если учетные данные участника с высоким уровнем кармы будут украдены?
Джеймс МакМахон
20
@nemo Тогда вы справитесь с этим. Но очень мало причин, чтобы избежать решения только по этой причине.
pbreitenbach
Потому что все увидят спам и высокую карму и узнают, что аккаунт украден.
Hamstar
37

А как насчет капчи с приманкой ?

lomaxx
источник
4
Объяснение Honeypot Captcha (выглядит очень хорошо): Боты любят формы. Они заполняют все поля. Honeypot Captcha включает в себя поле, скрытое CSS, поэтому его видят только боты (и те, у кого IE 3.0). Если он заполнен, это бот. Очень легко реализовать.
Клей Николс
5
Опять же, тривиально обходится с минимальными затратами времени. Правда, вам удастся заблокировать некоторые скрипт-программы, но если ваш сайт имеет ценность, это не ваша главная угроза.
AviD
CAPTCHAS honeypot плохо для удобства использования - программы чтения с экрана не будут игнорировать скрытые поля формы.
Баярд Рандель
Да, это просто развернуть и работает очень хорошо. Доступность - единственная реальная проблема.
мем
6
Доступность можно просто обойти, добавив немного текста:Hey, if youre a human, keep this field blank!
Strae
30

Избегайте худших капч за все время .

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

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

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

А женщине нужен мужчина, как рыбе нужен?

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

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

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

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

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

Джош
источник
14
Просто будьте осторожны с пустяковыми вопросами, поскольку они иногда могут быть легкими для вас и невероятно трудными для людей из разных стран, которые не владеют английским языком, или для людей, происходящих из другой культуры. Они могут расстроиться, если вы заставите их использовать словарь только для входа! Или, что еще хуже, они просто перестают пользоваться сайтом.
ya23
14
"Женщине нужен мужчина, как рыбе нужен?" Так каков ответ на этот вопрос?
Lotus Notes
2
велосипед. Цитата Ирины Данн (популяризирована Глорией Стейнем).
webbiedave
9
... как рыбе нужна рыбка.
Мэтт Лохкамп
28

Я видел это однажды на сайте друга. Он продает его за 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'   
Иеремия
источник
2
+1, хотя я не думаю, что вы должны платить за что-то подобное. Я бы предпочел построить его с нуля.
Далин Сейврайт
5
хорошо, но для слепых нужна и устная версия
про
29
Проблема в том, что это проще, чем взломать изображение. Все, что вам нужно сделать, это прочитать это на картинке, и у вас будет отличное черно-белое изображение для распознавания текста.
Андрей Кротков
@Andrei, существует альтернативная версия, сгенерированная с использованием «figlet», которая может «смешивать» символы вместе, чтобы они, символы капчи, разделяли символы ASCII. Это немного сложнее для распознавания.
Паси Саволайнен
58
Это может быть реклама, но а) это верный ответ на вопрос и б) автор четко заявляет, что это сделано другом (что означает, что он явно заявляет, что он предвзят), поэтому я не вижу никаких проблем с ответом ,
Майкл Стум
28

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

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

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

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

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

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

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


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

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

AviD
источник
Прокси и фермы не ломают и не обходят «CAPTCHA», так как они решаются людьми. В самом деле, само их существование свидетельствует о том, что современные методы действительно работают! CAPTCHA не означает «Тип представления, который я хочу», только «Представляет ли он человека» ...
Фрейзер,
10
Именно! Но капчи чаще всего используются для предотвращения «ботов» - и не имеет значения, являются ли эти боты людьми или нет, цель состоит в том, чтобы предотвратить массовое, не личное использование. Это только подтверждает то, что я всегда говорю, CAPTCHA решает неправильную проблему (и делает это плохо) ...
AviD
Есть много ситуаций, когда капча в порядке. Дело в том, что владельцы веб-сайтов должны выбрать решение, которое уравновешивает взаимодействие пользователя с контролем. Для некоторых нет капчи. Для других, капча. Для других, что-то еще. Но просто отстранение капчи не является умным.
pbreitenbach
1
Проблема заключается в том, что если вы введете CAPTCHA, это даст вам контроль. Это не так. Не один существенный бит. Существуют редкие ситуации, в которых он может обеспечить некоторую ценность, но НЕ «контролировать». (Я часто упоминал здесь CAPTCHA, вместе с другими механизмами это дает немного больше, чтобы помочь сделать спам
бесполезным
27

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

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

оборота andrewrk
источник
20

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

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

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

codethief
источник
17

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

Ник Реталлак
источник
Сначала я прочитал это как «Асирра - самая приемлемая капча». что слегка меня оттолкнуло Я согласен, что это, пожалуй, самое восхитительное, но, как говорится на сайте, автор бота может просто сохранить все изображения (может занять некоторое время), классифицировать их, тогда бот легко их сломает.
Далин Сейврайт
7
как слепой может ответить на это?
BBetances
это почти так же, как reCAPTCHA. мы ищем менее раздражающий и не основанный на имидже подход.
AhmetB - Google
Я должен сказать, что они используют довольно большое количество изображений, чтобы проверить их демо.
pimvdb
1
У меня было 3 попытки, прежде чем он признал, что я человек - вероятно, потому что некоторые изображения выглядели просто как большие меховые клубки.
Крамия
16

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

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

и т.п.

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

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

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

L̳o̳̳n̳̳g̳̳p̳o̳̳k̳̳e̳̳
источник
1
Также +1 за жестокость, но я просто хотел добавить, что это не будет работать со мной, я использую провайдер VB.NET eval и проверяю формат c: или rm -rf, символы новой строки, двоеточия, точки с запятой и т. Д. Вам нужно быть немного более изобретательным, чем это. И, кроме того, я никогда не позволяю Linux-скриптам работать от имени root, поэтому это тоже не сработает.
Стефан Штайгер
@ Longpoke Это просто не сработает. В большинстве современных Unix-систем есть встроенная защита rmот работы с -rf /.
Хомякен
лол, было бы смешно, если бы ты просто сказал это, чтобы я попробовал. Может быть, вместо этого будет работать rm -rf / *. В любом случае, есть много других плохих вещей, которые вы можете сделать.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Это также предполагает, что люди не знают о Python literal_eval(или эквивалентах в других языках), что является довольно печальным фактом.
Петр Викторин
rm -rf ~было бы разрушительным, если бы скрипт выполнялся на чьем-то персональном компьютере
kirb
16

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

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

тама
источник
7
"honeypot captcha"
mpen
15

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

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

Например , s sdfa т werwe JH с грустным к oghvefdhrffghlfgdhowfgh

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

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

  • использование случайных цветных букв вместо полужирного / курсива.
  • используя каждую вторую красную букву для CAPTCHA (уменьшает вероятность того, что боты идентифицируют буквы различного формата, чтобы угадать CAPTCHA)
Jarod Elliott
источник
1
Мне нравится этот - например, «пожалуйста, введите слово, написанное третьей подчеркнутой красной буквой, четвертой жирной зеленой буквой и пятой не жирной синей буквой».
AndreW
9
Этот пример выше 'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh' может быть решен с помощью простого регулярного выражения
alex
Это не будет хорошо для пользователей с acalcula. Есть ученые с этим недугом, поэтому не исключено, что с ним могут быть программисты.
BobbyShaftoe
Отличная идея! Возможно, даже играя с изменением цвета переднего плана / фона, вы можете получить что-то, что отображает текст, легко видимый для людей, но слишком случайный для ботов? Конечно, это труднее для дальтоников :-(
Шалом Креймер
2
Использование цвета может усложнить ситуацию, потому что вам нужно будет поддерживать разные формы дальтонизма. В противном случае это звучит довольно хорошо.
KarstenF
12

Хотя это подобное обсуждение было начато:

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

Лучшее управление CAPTCHA (Смотри Ма - НЕ ИЗОБРАЖЕНИЕ!)

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

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

КП.
источник
Это будет работать СЕЙЧАС, но как только достаточное количество сайтов будет использовать такой подход, спамеры будут отображать html для изображения и распознавать результат.
Деформация
12

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

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

Это круто ..

Хосе Лил
источник
4
Компьютеры не могут этого сделать. Также не могут слепые люди.
TRiG
1
Ни я, когда смотрю на него в высоком разрешении монитора. Эти изображения крошечные. Также один из них был какого-то неопознанного существа за белым забором.
jsims281
10

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

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

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

tghw
источник
Cyc может решить это тривиально ... и это с открытым исходным кодом. Для реализации потребуется не более пары часов сценариев.
rmeador
это также используется форумом Ubuntu. мне это нравится, и реализации проверок типа "2 + 2 =?" или "что такое первая буква алфавита" очень просто.
фисташка
8
Ответы: 1) Прямо сейчас, синий, потом красный, затем черный с оранжевыми оттенками возле центра города. 2) оранжевый, если он не заплесневелый, то зеленый, черный или белый. 3) коричневый, в Южной Калифорнии, если только вы не в Беверли-Хиллз, значит, зеленый.
ммр
52
@mmr Видите, это на самом деле преимущество системы, она не дает
умным рассылкам
2
Второй и третий ответы ориентированы на людей, живущих в пустынях или Балтиморе.
Майк Робинсон
10

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

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

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

Голле П., Дюшено, Н.: Запретить ботам играть в онлайн-игры <- ACM Portal

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

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

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

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

jwendl
источник
Почему бот не может зарегистрировать OpenID? Злоумышленнику просто нужно создать своего собственного издателя OpenID.
Rjmunro
Да, @rjmunro, и это хорошо. Сложность интернета заключается в идентификации анонимных пользователей. Если бот регистрирует OpenID, и вы идентифицируете этого пользователя OpenID как бота, вы можете закрыть его. Это больше не анонимно. Это не мешает нескольким регистрациям одного и того же провайдера, но затем вы можете отключить этого провайдера для разрешения ботов. Цель состоит в том, чтобы удалить анонимность Интернета как можно лучше.
Jwendl
10

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

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

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

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

Вторая идея, чтобы сделать это проще

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

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

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

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

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

Последняя идея - я называю это CicleCaptcha

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

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

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

Аристос
источник
Re-captcha имеет текст в речь для своих слов. Он может сказать вам, где нажать.
Роберт П
@RobertP Нажатие, когда у вас проблемы со зрением, похоже на стрельбу, когда у вас проблемы со зрением ... «Просто целитесь в голову».
8
@pst "Чуть левее. Правильно, еще немного. Хорошо. Хорошо. Теперь вернемся. Вверх. Нет, вверх в другую сторону. Да, у вас это есть. Еще немного. Да. Просто немного больше. Почти там. Почти там ... почти ... почти ... CAPTCHA !!! "
Роберт П
9

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

Крис Бартоу
источник
7

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

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

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

Брэндон Вамбольдт
источник
Использование css для скрытия поля формы и утверждение, что оно пустое, также работает для меня. Не дурак, но это хороший вариант.
Крис
Техника 1: Honeypot
кевинджи,
6

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

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

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

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

Джош
источник
Я полагаю, что анализатор значительно проще, чем написание взломщика с изображением. Помните, что самое простое, что вы предлагаете пользователям, - это то, что, вероятно, будет использовать спамбот. К сожалению, капча no-JS должна быть сложнее.
stalepretzel
5

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

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

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

TheEmirOfGroofunkistan
источник
1
«То, что вкуснее», на мой взгляд, довольно субъективно. Люди, которые выходят на конечности относительно вкуса, будут интерпретироваться как бот. Более того, только с двумя ответами шанс пройти как бот составляет 50%.
pimvdb
Верно с субъективной стороны, но конкретное было из оригинального вопроса. Я хотел использовать все три (или несколько) типов случайным образом. Также вероятность прохождения составляет всего 50%, если ответом является множественный выбор. Если пользователь вводит слово без указания возможных ответов в списке, боту становится намного сложнее выбрать правильные слова в вопросе / ответе.
TheMirOfGroofunkistan
5

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

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

Тина Мари
источник
5

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

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

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

Норман Рэмси
источник
5

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

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

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

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

Боб Аман
источник
5

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

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

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

2) Спам на основе контекста

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

Самый голосующий ответ говорит:

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

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

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

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

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

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

Геннадий Ванин Геннадий Ванин
источник
1
Вы изложили проблему почти с каждым ответом в этой теме. Все они были бы побеждены быстро, если бы они не были эксклюзивными для крошечного сайта. Если какой-либо из них будет использоваться на большом веб-сайте или на нескольких небольших веб-сайтах (скажем, как плагин Wordpress), они будут побеждены через день. Они на самом деле не капчи, а счастливые случаи безопасности через неизвестность. Вы также правы; современный спам - это комментарии, которые даже я не могу распознать как спам. Я отказался от CAPTCHA и вместо этого использую Mollom. Краудсорсинговый спам - лучший подход.
Дан
5

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

Защитный код

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

Росс
источник
5
Кроме: Знаете ли вы, что ответ на пример вопроса (в случае, если кто-то наткнется на это позже, а изображения нет: «Сколько ошибок синтаксиса PHP в $var == array(1 = 'one');;») 1, не так 3ли? (Серьезно. Попробуйте $var == array(1 => 'one');;) ^ _ ~
pinkgothic
Хех, это было достаточно долго, что я не помню, чтобы сделать этот образ. Вы, конечно, правы, и я не думаю, что это было бы неплохо, если бы вы хотели использовать капчу, но, возможно, это было бы требованием для участия в форуме по программированию.
Росс
4

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

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

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

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

Питер
источник