Я придумал решение, которое работает, но не красиво. Я использовал пакет https://github.com/hzdg/django-enumfields , чтобы помочь с этим.
Я создал свое собственное поле формы:
class EnumChoiceField(enumfields.forms.EnumChoiceField):
def __init__(self, enum, *, coerce=lambda val: val, empty_value='', **kwargs):
if isinstance(enum, six.string_types):
self.enum = import_string(enum)
else:
self.enum = enum
super().__init__(coerce=coerce, empty_value=empty_value, **kwargs)
И использовал его в моей форме Django. Затем в моем собственном AppConfig я сделал это:
class CoreAppConfig(AppConfig):
name = 'myapp.core'
def ready(self):
registry = get_global_registry()
@convert_form_field.register(EnumChoiceField)
def convert_form_field_to_enum(field: EnumChoiceField):
converted = registry.get_converted_field(field.enum)
if converted is None:
raise ImproperlyConfigured("Enum %r is not registered." % field.enum)
return converted(description=field.help_text, required=field.required)
И, наконец, в моей схеме:
UnitEnum = Enum.from_enum(Unit)
get_global_registry().register_converted_field(Unit, UnitEnum)
Мне действительно это не нравится, но я не мог придумать лучшего способа чтобы справиться с этим. Я столкнулся с этой идеей при поиске другой проблемы с графеновым джанго здесь https://github.com/graphql-python/graphene-django/issues/481#issuecomment-412227036 .
Я чувствую, что у есть , чтобы быть лучшим способом сделать это.
Если основным вопросом с не использованием изображений для капчи является загрузка ЦП создания тех изображений, это может быть хорошая идея выяснить способ создать те изображения, когда загрузка ЦП "легка" (собственно говоря). Нет никакой причины, почему капча должна быть сгенерирована в то же самое время, когда форма сгенерирована. Вместо этого Вы могли вытянуть от большого кэша капчей, генерировал последнюю загрузку сервера времени, было "легко". Вы могли даже снова использовать кэшируемые капчи (в случае, если существует странный скачок в представлениях формы), пока Вы не повторно создаете набор новых в следующий раз, когда загрузка сервера "легка".
Простая математика не является ответом - спаммер не должен даже писать простой синтаксический анализатор. Google сделает это для них даже при использовании слов вместо числа, таким образом, это просто требует быстрого поиска на Google, и это сделано.
Это может сделать текст к числовым преобразованиям легко также .
, кажется, существует своего рода ошибка в SO's, представляющем, поскольку это только показывает первую ссылку, когда это отправляется, даже при том, что предварительный просмотр работает правильно. Вторая ссылка - переходят к Google и поиску "1 * сорок два"
Не наиболее усовершенствованное оружие против спама, но эй, Microsoft подтвердила:
Nobot-управление (часть AjaxControlToolkit).
NoBot может быть протестирован путем нарушения любого из вышеупомянутых методов: регистрация назад быстро, регистрация назад много раз или отключение JavaScript в браузере.
Демонстрация:
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx
Если Вы хотите основанный на ASCII подход, смотрите на интеграцию FIGlet. Вы могли сделать некоторые пользовательские шрифты и сделать некоторую рандомизацию выбора шрифта на символ для увеличения entrophy. Кернинг делает текст более визуально приятным и немного более трудным для бота перепроектировать.
, такие как:
______ __ ____ _____ / __/ /____ _____/ /__ / __ \_ _____ ____/ _/ /__ _ __ _\ \/ __/ _ `/ __/ '_/ / /_/ / |/ / -_) __/ _/ / _ \ |/|/ / /___/\__/\_,_/\__/_/\_\ \____/|___/\__/_/ /_//_/\___/__,__/
Это будет per-sign-up и не по почте, правильно? Поскольку это просто уничтожило бы сайт, даже с автоматизацией jQuery.
Вы когда-либо планируете предоставить API Stackoverflow, который позволил бы управление вопросами/ответами программно? Если так, как основанная на капче защита собирается вписаться в это?
При обеспечении просто богатого интерфейса только для чтения с помощью лент RSS Atom позволил бы людям создавать некоторый интересный smart-clients/tools для организации и поиска обширного содержания, которое является Stackoverflow; я видел наличие возможности за пределами веб-интерфейса, чтобы спросить и/или ответить на вопросы, а также голосование по содержанию как чрезвычайно полезные. (Хотя это не может соответствовать основанной на рекламе модели дохода.)
я предпочел бы видеть, что Stackoverflow использует контрольный подход эвристики, который пытается обнаружить злонамеренное действие и заблокировать незаконного пользователя, но может понять, как использование КАПЧИ может быть более простым подходом с Вашими данными выпуска, подходящими скоро.
Я описал класс PHP, который позволяет Вам принять решение использовать определенный класс Вопроса о Капче (математика, именование, противоположности, завершение), или рандомизировать, какой тип используется. Это вопросы, на которые могло ответить большинство англоязычных детей. , Например:
Даже с представителем, должен все еще быть НЕКОТОРЫЙ тип капчи, для предотвращения злонамеренного нападения сценария.
Если Вы склоняетесь к решению для вопроса/ответа в прошлом, я представил пользователей с выпадающим из 3-5 случайных вопросов, которые они могли выбрать из и затем ответить, чтобы доказать, что они были человеческими. Список был отсортирован по-другому на каждой загрузке страницы.
Без фактической КАПЧИ как Ваш первый линия обороны, не Вы все еще уязвимый для спаммеров, пишущих сценарий браузера (тривиальное использование VB и IE)? Т.е. загрузите страницу, переместитесь по DOM, нажмите кнопку отправки, повторитесь...
Вы посмотрели Waegis?
"Waegis является веб-сервисом онлайн, который представляет открыть API (Application Programming Interface). Это получает входящие данные через свои методы API и применяет быструю проверку и определяет спам и законное содержание вовремя. Это тогда возвращает результат клиенту определить, является ли содержание спамом или нет".
У меня была загрузка проблем спама о сайте phpBB 2.0, который я выполнял некоторое время назад (сайт теперь обновлен).
я установил пользовательскую модификацию капчи, которую я нашел на pbpBB форумах, которые работали хорошо сроком на время. Я нашел, что действительное решение комбинировало это с дополнительными 'необходимыми' полями [на странице создания учетной записи].
я добавил; Местоположение и Размещение (приземленный, все же удобный для знания).
бот никогда не пытался заполнить их, все еще предполагая, что капча была точкой сбоя для каждой попытки.
Mixriot.com использует КАПЧУ ASCII-творчества (не уверенный, если это - сторонний инструмент.)
OooOOo .oOOo. o O oO
o O O o O
O o o o o
ooOOo. OoOOo. OooOOo O
O O O O o
o O o o O
`OooO' `OooO' O OooOO
Как насчет основанной на CSS КАПЧИ?
<div style="position:relative;top:0;left:0">
<span style="position:absolute;left:4em;top:0">E</span>
<span style="position:absolute;left:3em;top:0">D</span>
<span style="position:absolute;left:1em;top:0">B</span>
<span style="position:absolute;left:0em;top:0">A</span>
<span style="position:absolute;left:2em;top:0">C</span>
</div>
Это отображает "ABCDE". Конечно, все еще легко обойти использование пользовательского бота.
университет reCAPTCHA спонсировал и помогает оцифровать книги.
Мы генерируем и проверяем искаженные изображения, таким образом, Вы не должны запускать дорогостоящие программы формирования изображения.
Кто говорит, что Вы имеете к , создают все изображения на сервере с каждым запросом? Возможно, Вы могли иметь статический список изображений или вытянуть их от flickr. Мне нравится, "нажимают на котенка" идея капчи. http://www.thepcspy.com/kittenauth
Кто-то также предлагает библиотеку Raphael JavaScript, которые, по-видимому, позволяют Вам привлечь клиент во всех популярных браузерах:
http://dmitry.baranovskiy.com/raphael/
.. но это точно не работало бы с моим <noscript>
случай, теперь будет он?:)
Я сделал бы простую основанную на времени КАПЧУ.
JavaScript включил: время Контрольно-пропускного пункта минус время загрузки, больше, чем HUMANISVERYFASTREADER.
JavaScript отключил: Запрос HTTP Времени начинает минус время концы ответа HTTP (хранилище на сессии или скрытое поле) больше, чем HUMANISVERYFASTREADER плюс времена NETWORKLATENCY 2.
В любом случае, если это возвращает true затем, Вы перенаправляете к КАПЧЕ изображения. Это означает, что большую часть времени люди не должны будут использовать КАПЧУ изображения, если они не очень быстрые читатели, или бот спама установлен задержать ответ.
Примечание, что при использовании скрытого поля я использовал бы случайное идентификационное название его в случае, если бот обнаруживает, что оно используется в качестве КАПЧИ и пытается изменить значение.
Другой совершенно другой подход (который работает только с JavaScript) должен использовать jQuery, Поддающийся сортировке функция, чтобы позволить пользователю сортировать несколько изображений. Возможно, маленькое 3x3 загадка.
Не техническое, а теоретическое решение.
1. Дается слово или звук. «Переместите мышь в верхний левый угол экрана и нажмите на оранжевую кнопку» или «Нажмите здесь, а затем нажмите здесь» (требуется многоэтапный ответ) Когда задачи выполнены, проблема решена. Выберите объекты, которые уже находятся на странице, чтобы они нажимали. Выполните хотя бы два действия. 1242 Надеюсь, это поможет.
Я думаю, что проблема с текстовым подходом капчи заключается в том, что текст можно проанализировать и, следовательно, ответить на него.
Если ваш сайт популярен (например, Stackoverflow) и люди, которые любят писать код, держатся на нем (как и Stackoverflow), есть вероятность, что кто-то воспримет «взломать капчу» как вызов, который легко решить с помощью простого javascript + greasemonkey.
Так, например, подход скрытых красочных букв ], предложенный где-то в потоке (крутая идея, действительно идея), может быть легко сломан простым анализом следующей строки примера:
<div id = "captcha">
<span class = "red">s</span>
asdasda
<span class = "red">t</span>
asdff
<span class = "red">a</span>
jeffwerf
<span class = "red">c</span>
sdkk
<span class = "red">k</span>
</div>
То же самое, разобрать это легко:
3 + 4 = ?
Если он следует схеме (x + y) или тому подобное.
Аналогично, если у вас есть ряд вопросов ( какого цвета оранжевый?
, сколько дварфов окружают белоснежный?
),если у вас нет тысяч сотен из них, можно выбрать около 30, создать хэш вопросов и ответов и заставить бот-скрипт перезагружать страницу, пока не будет найден один из 30.
Теоретическая идея фильтра капчи. Задайте вопрос пользователю, на который сервер может как-то тривиально ответить, и пользователь тоже может ответить. Общий ответ становится своего рода открытым ключом, известным как пользователю, так и серверу.
Пример, связанный с переполнением стека:
Сколько очков репутации у пользователя XYZ?
Подсказка: посмотрите сбоку от экран для этой информации или перейдите по этой ссылке. Пользователь мог быть случайно выбран из числа известных пользователей, переполненных стеком.
Более общий пример: Где ты живешь? Какие погодные условия были в 9:00 в субботу, где вы живете? Подсказка: используйте погоду Yahoo и укажите влажность и общие условия.
Затем пользователь вводит свой ответ
Сиэтл Небольшая облачность, влажность 85%
Компьютер подтверждает, что это действительно были те погодные условия в Сиэтле в то время.
Ответ уникален для пользователя, но сервер имеет способ найти и подтвердить этот ответ.
. Типы вопросов могли быть разными. Но идея состоит в том, что вы выполняете некоторую обработку комбинации фактов, которые человек должен был бы найти, а сервер мог бы легко найти. Этот процесс состоит из двух частей и требует определенного уровня взаимопонимания. Это своего рода испытание на обратное вращение. Попросите человека доказать, что он может предоставить вычислимый фрагмент данных, но для получения вычислимых данных требуются человеческие знания.
Другая возможная реализация. Как вас зовут и когда вы родились?
Человек даст известный ответ, а компьютер сможет найти информацию в базе данных.
Возможно, база данных может быть заполнена ботом, но ему потребуется некоторый интеллект, чтобы собрать соответствующие факты воедино. База данных или справочная таблица на стороне сервера может быть систематически очищена от очевидных свойств, подобных спаму.
Я уверен, что есть недостатки и детали, которые необходимо проработать при реализации. Но концепция кажется разумной. Пользователь предоставляет комбинацию фактов, которые сервер может найти, но сервер может контролировать, какие комбинации следует запрашивать. Комбинации могут быть рандомизированы, и сервер может использовать различные стратегии для поиска общего ответа. Настоящая выгода состоит в том, что вы просите пользователя предоставить своего рода профилирование и раскрытие себя в своем ответе. Из-за этого ботам становится все труднее работать систематически. Группа компьютеров начинает использовать одни и те же ответы на многих серверах и в формах капчи, таких как
Я робот родился в 1972 году в 15:45.
Затем такой ответ может быть профилирован и использован всей сетью для блокировки боты, эффективно делают автоматизацию бесполезной после нескольких итераций.
Когда я думаю об этом больше, было бы интересно реализовать базовый тест на понимание прочитанного для комментирования сообщений в блогах. После окончания сообщения в блоге автор мог задать вопрос своим читателям. Вопрос может быть уникальным для каждого сообщения в блоге, и он будет иметь дополнительное преимущество, требуя, чтобы пользователи действительно прочитали, прежде чем комментировать. Можно написать простой вопрос в конце сообщения с ответами, хранящимися на стороне сервера, а затем получить массив бессмысленных вопросов для добавления базы данных. Ответ на стороне сервера (ложь, нет)
Это сообщение было о капчах? Ответ на стороне сервера (правда, да)
Это был пост о Майкле Джексоне? Ответ на стороне сервера (ложь, нет)
Кажется полезным иметь несколько вопросов, представленных в случайном порядке, и сделать порядок значимым. например, приведенное выше будет = нет, да, нет. Перемешайте порядок и получите набор бессмысленных вопросов с ответами «нет» и «да».
Некоторые здесь заявили о решениях, которые никогда не были нарушены бот. Я думаю, проблема в том, что вы также никогда не знаете, сколько людей не смогли пройти через «CAPTCHA».
Веб-сайт не может стать очень недружелюбным по отношению к пользователю-человеку. Похоже, что цена ведения бизнеса в Интернете заключается в том, что вам приходится выполнять некоторую ручную работу, чтобы игнорировать спам. CAPTCHA (или аналогичные системы), которые отталкивают пользователей, хуже, чем отсутствие CAPTCHA вообще.
По общему признанию, у StackOverflow очень хорошо осведомленная аудитория, так что можно использовать гораздо больше творческих решений. Но для более обычных сайтов вы действительно можете использовать только то, к чему люди привыкли, иначе вы просто вызовете путаницу и потеряете посетителей и трафик. В общем, CAPTCHA не следует настраивать на остановку всех ботов или других векторов атак. Это просто делает задачу слишком сложной для законных пользователей. Начните с легкости и усложняйте задачу, пока уровень спама не станет в некоторой степени управляемым, но не более.
И, наконец, я хочу вернуться к решениям на основе изображений: вам не нужно создавать новый образ каждый раз время. Вы можете заранее создать их большое количество (может быть, несколько тысяч?), А затем постепенно менять этот набор с течением времени. Например, каждые 10 минут или каждый час удаляйте 100 самых старых изображений и заменяйте их набором новых. По каждому запросу случайным образом выберите CAPTCHA из общего набора.
Конечно, это не выдержит направленной атаки, но, как здесь много раз упоминалось ранее, большинство CAPTCHA не выдержит. Однако этого будет достаточно, чтобы остановить случайного бота.
Ajax Fancy Captcha на основе изображения, за исключением того, что вам нужно перетаскивать на основе распознавания формы вместо ввода букв / цифр, содержащихся на изображении.
] [] []Пожалуйста, позвоните xxxxx xxxxxxx, и давайте поговорим о погоде на вашем месте.[
] [
]Но, ну, в наши дни слишком быстрые и слишком массово ориентированные на прибыль, что даже один телефонный звонок с выбранным нами поставщиком услуг был бы слишком дорогим для него (время дорого).[
] []Большую часть времени мы соглашались разговаривать с машинами.[
] []Печальные времена...[
].Как насчет того, чтобы сделать CAPTCHA, в котором есть буквы разных цветов, и попросить пользователя ввести только те, которые определенного цвета?
Я думаю, что мы должны предположить, что этот сайт подвергнется предназначенным нападениям регулярно, не только универсальным дрейфующим ботам. Если это станет первым хитом для поисков программистов, это потянет партия из огня.
мне, который подразумевает, что любая система КАПЧИ не может вытянуть из повторяющегося списка вопросов , который человек может вручную подать в бота, в дополнение к тому, чтобы быть неотгадываемым ботами.
Mollom - другой сервис типа askimet, который может представлять интерес. От парней, которые записали, drupal / выполняют acquia.
Возможно, сообщество может придумать некоторые хорошие основанные на тексте КАПЧИ?
Мы можем тогда придумать хороший список на основе тех с большинством голосов.
Наш спам формы был решительно сокращен после реализации метода капчи ловушки, как упомянуто ранее. Я полагаю, что мы не приняли никого начиная с реализации его.
Ответ на исходный вопрос:
, я видел изображения животных [что это?]. Голоса за комиксы используют изображение символа с их именем, написанным где-нибудь в изображении [тип на имя]. Невозможный проанализировать, не хорошо для слепых людей.
у Вас мог быть аудио буквенно-цифровой индикатор чтения нейтрализации (те же буквы и числа, которые Вы имеете в капче).
Заключительная линия обороны: сделайте спам легким сообщить (один щелчок) и легкий удалить (один экран резюме, чтобы проверить, что это - учетная запись спама, с последними десятью отображенными сообщениями, один щелчок для удаления учетной записи). Это все еще дорого временем, все же.