Я придумал решение, которое работает, но не красиво. Я использовал пакет 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 .
Я чувствую, что у есть , чтобы быть лучшим способом сделать это.
метод А, который я разработал и который, кажется, работает отлично (хотя я, вероятно, не получаю столько же спама комментария сколько Вы), должен иметь скрытое поле и заполнить его поддельным значением, например:
<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, Ваш комментарий будет отмечен как спам, однако, я действительно рассматриваю комментарии, отмеченные как спам, таким образом, это не проблема.
Ответ на комментарии
@MrAnalogy: серверный подход звучит вполне как хорошая идея и является точно тем же как выполнением его в JavaScript. Хороший Вызов.
@AviD: я знаю, что этот метод подвержен прямым нападениям, как я упомянул на мой блог . Однако это защитит от Вашего среднего бота спама, который вслепую отправляет мусор любой форме, которую это может найти.
Простой текст звучит великолепно. Взятка сообщество, чтобы сделать работу! , Если Вы верите, как я делаю, что, ТАКИМ ОБРАЗОМ, представитель указывает, измеряют обязательство пользователя помочь сайту успешно выполниться, абсолютно разумно предложить точки репутации, чтобы помочь защитить сайт от спаммеров.
Предложение +10 репутаций каждого вклада простого вопроса и ряда корректных ответов. Вопрос должен соответственно далеко (расстояние редактирования) от всех существующих вопросов, и репутация (и вопрос) должна постепенно исчезать, если люди не могут ответить на это. Скажем, если интенсивность отказов на корректных ответах составляет больше чем 20%, то submitter теряет одну точку репутации на неправильный ответ максимум до 15. Таким образом, если Вы отправляете плохой вопрос, Вы добираетесь +10 теперь, но в конечном счете Вы будете сетевые-5. Или возможно имеет смысл просить, чтобы выборка пользователей голосовала по ли капча questionis хорошая.
Наконец, как ежедневное ограничение представителя, скажем, никакой пользователь не может заработать больше чем 100 репутаций путем представления вопросов о капче. Это - разумное ограничение на вес, данный таким вкладам, и он также может помочь предотвратить спаммеров от вопросов об отборе в систему. Например, Вы могли выбрать вопросы не с равной вероятностью, а с вероятностью, пропорциональной репутации submitter. Jon Skeet, не отправляйте вопросы :-)
У меня были удивительно хорошие результаты с простым, "Оставляют это незаполненное поле": поле. Боты, кажется, заполняют все, особенно при именовании поля чем-то как "URL". Объединенный со строгой проверкой ссылающегося домена, у меня не было бота, заканчивают его все же.
не забывайте о доступности здесь. Капчи известно неприменимы для многих людей, использующих программы экранного доступа. Простые математические проблемы или очень тривиальные мелочи (мне понравилось, "какой цвет является небом" вопрос) являются намного более дружественными по отношению к пользователям с ослабленным зрением.
Что при использовании комбинации идей капчи Вы имели (выберите любого из них - или выберите одного из них случайным образом):
с добавлением размещения той же самой капчи в css скрытый раздел страницы - идея ловушки. Тем путем у Вас было бы одно место, где Вы будете ожидать корректный ответ и другого, где ответ должен быть неизменным.
Очень простая арифметика хороша. Слепые люди будут в состоянии ответить. (Но поскольку Jarod заявил, остерегайтесь приоритета оператора.) Я заключаю, что кто-то мог записать синтаксический анализатор, но он делает спам более дорогостоящим.
Достаточно простой, и будет не трудно кодировать вокруг этого. Я вижу две угрозы здесь:
С простой арифметикой, Вы могли бы отбить угрозу № 1, но не угроза № 2.
Лучшая капча когда-либо! , Возможно, Вам нужно что-то вроде этого для регистрации для не допускания шушеры.
Мне лично не нравится КАПЧА, она вредит удобству использования и не решает проблему безопасности создания недопустимых действительных пользователей.
я предпочитаю методы обнаружения бота, что можно сделать сторону сервера. Так как у Вас есть действительные пользователи (благодаря OpenID), можно заблокировать тех, кто не "ведет себя", просто необходимо определить шаблоны бота и соответствовать ему к шаблонам типичного пользователя и вычислить различие.
Davies, N., Mehdi, Q., Gough, N.: Создание и Визуализация Интеллектуального NPC с помощью Игровых Механизмов и Инструментов AI http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06.pdf
Golle, P., Ducheneaut, N.: Препятствование тому, чтобы Боты Играли в Онлайн-игры < - Портал ACM
Ducheneaut, N., Moore, R.: Социальная Сторона Игр: Исследование Шаблонов Взаимодействия в В широком масштабе Многопользовательской Онлайн-игре
Уверенный большинство этих ссылок указывает на обнаружение бота видеоигры, но это вызвано тем, что, именно это тема документа нашей группы назвала войны Робота: Исследование В игре Идентификации Робота . Это не было опубликовано или ничто, просто что-то для школьного проекта. Я могу послать по электронной почте, если Вам интересно. Факт то, хотя, что, даже если он основан на обнаружении бота видеоигры, можно обобщить его к сети, потому что существует пользователь, присоединенный к шаблонам использования.
я действительно соглашаюсь с методом MusiGenesis этого подхода, потому что это - то, что я использую на своем веб-сайте, и он действительно работает прилично хорошо. Невидимый процесс КАПЧИ является достойным способом заблокировать большинство сценариев, но это все еще не препятствует тому, чтобы устройство записи сценария перепроектировало Ваш метод и "фальсифицировало" значения, которые Вы ищете в JavaScript.
я скажу, что лучший метод должен 1) установить пользователя так, чтобы можно было заблокироваться, когда они плохи, 2) определить алгоритм, который обнаруживает типичные шаблоны по сравнению с нетипичными шаблонами использования веб-сайта и 3) заблокировать того пользователя соответственно.
Я просто использую простые вопросы, на которые любой может ответить:
, Какой цвет является небом?
, Какой цвет является апельсином?
, Какой цвет является травой?
Это делает его так, чтобы у кого-то был к пользовательской программе бот на Ваш сайт, который, вероятно, не стоит усилия. Если они делают, Вы просто изменяете вопросы.
Я знаю, что никто не считает это, но что относительно собака или кошка КАПЧА?
необходимо сказать, какой является кошкой или собакой, машины не могут сделать этого.. http://research.microsoft.com/asirra/
Является прохладным..
Хотя этот подобное обсуждение было запущено:
Мы пробуем это решение на одном из нашего часто, данные добыли приложения:
А Лучшее Управление КАПЧОЙ (Look Ma - НИКАКОЕ ИЗОБРАЖЕНИЕ!)
Вы видите его в действии с нашим Поиск Строительных инспекций .
можно просмотреть Источник и видеть, что КАПЧА является просто HTML.
Хотя все мы должны знать основную математику, математическая загадка могла вызвать некоторый беспорядок. В Вашем примере я уверен, что некоторые люди ответили бы "8" вместо "1".
Был бы простая строка текста со случайными символами, выделенными полужирным или курсив подойти? Пользователь просто должен ввести полужирный / курсив как КАПЧУ.
, Например, ssdfa twerwe jhc, печальный , k oghvefdhrffghlfgdhowfgh
В этом случае "стек" была бы КАПЧА. На этой идее существуют очевидно многочисленные изменения.
Редактирование: изменения В качестве примера для обращения к некоторым потенциальным проблемам, отождествленным с этой идеей:
Asirra является самой восхитительной капчой когда-либо.
Убедитесь, что это не что-то , Google может ответить все же. Который также показывает проблему со что - порядок операций!
Так, КАПЧА обязательна для всех пользователей кроме модераторов. [1]
Это невероятно глупо. Таким образом, будут пользователи, которые могут редактирование какое-либо сообщение на сайте , но не отправлять без КАПЧИ? Если у Вас есть достаточно представителя к сообщениям downvote, у Вас есть достаточно представителя для регистрации без КАПЧИ. Сделайте его выше, если Вы имеете к. Плюс существует много методов обнаружения спама, которые можно использовать без распознавания изображений, так, чтобы это даже для незарегистрированных пользователей никогда не было бы необходимо заполнить те заброшенные формы КАПЧИ.
КАПЧА, в ее текущем осмыслении, повреждена и часто легко обойдена. НИ ОДНО из существующих решений не работает эффективно - Gmail следует только за 20% времени, в лучшем случае
Это на самом деле намного хуже, чем это, так как та статистическая величина только использует OCR, и существуют другие пути вокруг этого - например, прокси КАПЧИ и фермы КАПЧИ. Я недавно сделал доклад на предмете в OWASP, но ppt еще не онлайн...
, В то время как КАПЧА не может обеспечить фактическую защиту ни в какой форме, это может быть достаточно для Ваших потребностей, если то, что Вы хотите, должно заблокировать случайный автомобильный мусор. Но это не остановит даже полупрофессиональных спаммеров.
Как правило, для сайта с ресурсами любого значения для защиты Вам нужен 3-аспектный подход:
КАПЧА может помочь КРОШЕЧНОМУ биту со вторым зубцом, просто потому что это изменяет экономику - если другие зубцы существуют, больше не становится стоящим потрудиться прорываться через КАПЧУ (минимальная стоимость, но все еще стоимость) для преуспевания в таком небольшом количестве спама.
Снова, не весь Ваш спам (и другой мусор) будет сгенерированным компьютером - использование прокси КАПЧИ или займется сельским хозяйством, у плохих парней могут быть настоящие люди, массово рассылающие Вас.
<час>прокси КАПЧИ - когда они вручают Ваше изображение пользователям других сайтов, например, порно, игры, и т.д.
, ферма КАПЧИ А имеет многих дешевых рабочих (Индия, Дальний Восток, и т.д.) решение их... обычно между 2-4$ на 1 000 решенных капчей. Недавно видел регистрацию для этого на EBay...
Я видел это однажды на сайте друга. Он продает его за 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'
Избегайте худшие КАПЧИ всего времени .
Мелочи в порядке, но необходимо будет записать каждому из них:-(
, Кто-то должен был бы записать им.
Вы могли сделать вопросы о мелочах таким же образом, ReCaptcha делает распечатанные слова. Это предлагает два слова, одно из которых это знает ответ на, другой, которого это не делает - после достаточного количества ответов на втором, это теперь знает ответ на это также. Задайте два вопроса мелочей:
женщине А нужен человек как a потребностей рыбы?
Оранжевый оранжевый оранжевый. Введите зеленый.
, Конечно, это, возможно, должно быть вместе с другими методами, такими как таймеры или вычисленные секреты. Вопросы должны были бы вращаться/ликвидироваться, так для хранения предоставления вопросов Вы могли для данного случая добавить:
Вводят Ваш очевидный вопрос:
Вам даже не нужен ответ; другие люди поймут это для Вас. Вам, вероятно, придется позволить отмечать вопросы как "слишком трудно", как этот: "asdf ejflf asl; jf ei; fil; asfas".
Теперь, для замедления кого-то, кто выполняет StackOverflow, играющий бот Вы повернули бы вопросы на IP-адрес - таким образом, тот же IP-адрес не получает тот же вопрос до весь , вопросы исчерпываются. Это замедляет создавание словаря известных вопросов, вынуждая владельца - человека ботов ответить на все Ваши вопросы мелочей.
преимущество этого подхода состоит в том, что для большинства людей КАПЧА никогда не будет видима!
мне нравится эта идея, есть ли не какой-либо способ, которым мы можем просто сцепиться в систему представителя? Я имею в виду, любой с говорит, что +100 представителей, вероятно, будут человеком. Таким образом, если у них есть представитель, Вы даже не должны потрудиться делать ЧТО-ЛИБО с точки зрения КАПЧИ.
Затем если они не, затем отправляют его, я уверен он, привычка берет это, много сообщений для получения до 100 и сообщество немедленно погрузятся на ком-либо, кажется, посылают спам с наступательными тегами, почему бы не добавляют "ссылку" спама отчета это downmods 200? Получите 3 из тех, разблокированный успех спам-робота, до свидания;)
РЕДАКТИРОВАНИЕ : Я должен также добавить, мне нравится математическая идея за КАПЧУ неизображения. Или возможно простой вещь типа загадки. Может сделать отправляющий еще более интересный ^_^
Я использовал следующую простую технику, это не является надежным. Если кто-то действительно хочет обойти это, легко посмотреть на источник (т.е. не подходящий для 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 и попытаются заполнить каждое поле формы, тогда как люди не будут видеть поля ввода и оставлять их в покое.
существует, очевидно, намного больше вещей, которые можно сделать для создания этого менее годным для использования, но это - просто фундаментальное понятие.
Если я не пропускаю что-то, что случилось с использованием reCAPTCHA, поскольку вся работа сделана внешне.
Просто мысль.
На самом деле это могла быть идея иметь связанный набор капчи программирования. Например:
существует возможность кого-то создающего программу проверки синтаксиса для обхода этого, но это - намного больше работы для обхода капчи. Вы получаете идею наличия связанной капчи все же.
Я должен признать, что не имею никакого опыта при борьбе со спам-роботами и действительно не знаю, насколько сложный они. Однако я ничего не вижу в статье jQuery, которая не могла быть выполнена просто на сервере.
Для перефразирования сводки из статьи jQuery:
Другая опция, если Вы хотите использовать традиционную КАПЧУ изображения без издержек генерации их по каждому запросу, состоит в том, чтобы предварительно генерировать их офлайн. Тогда просто необходимо случайным образом выбрать для отображения с каждой формой.
Мой любимая КАПЧА когда-либо :
Сделайте запрос AJAX для криптографического одноразового номера на сервере. Сервер отправляет ответ JSON, содержащий одноразовый номер, а также устанавливает файл cookie, содержащий значение одноразового номера. Вычислить SHA1-хэш одноразового номера в JavaScript, скопировать значение в скрытое поле. Когда пользователь отправляет форму POST, он отправляет cookie обратно со значением nonce. Вычислите хэш SHA1 одноразового номера из файла cookie, сравните его со значением в скрытом поле и убедитесь, что вы сгенерировали одноразовый номер за последние 15 минут (для этого подходит memcached). Если все эти проверки пройдены, опубликуйте комментарий.
Этот метод требует, чтобы спамер сядет и выяснил, что происходит, и как только они это сделают, ему все равно придется отправлять несколько запросов и поддерживать состояние cookie, чтобы получить комментарий. . Кроме того, они видят заголовок Set-Cookie
только в том случае, если они сначала анализируют и выполняют JavaScript и делают запрос AJAX. Это намного, намного больше работы, чем готово выполнить большинство спамеров, тем более что работа применима только к одному сайту. Самым большим недостатком является то, что любой, у кого отключен JavaScript или файлы cookie, помечается как потенциальный спам. Это означает, что очереди на модерацию по-прежнему являются хорошей идеей.
Теоретически это можно квалифицировать как безопасность через неясность, но на практике это отлично.
Я ни разу не видел, чтобы спамер пытался сломать эту технику , хотя, может быть, раз в пару месяцев я получаю спам-запись по теме, вводимую вручную, и это немного жутковато.
Это намного, гораздо больше работы, чем готово выполнить большинство спамеров, тем более, что эта работа применима только к одному сайту. Самым большим недостатком является то, что любой, у кого отключен JavaScript или куки, помечается как потенциальный спам. Это означает, что очереди на модерацию по-прежнему являются хорошей идеей.Теоретически это можно квалифицировать как безопасность через неясность, но на практике это отлично.
Я ни разу не видел, чтобы спамер пытался сломать эту технику , хотя, может быть, раз в пару месяцев я получаю спам-запись по теме, вводимую вручную, и это немного жутковато.
Это намного, намного больше работы, чем готово выполнить большинство спамеров, тем более что работа применима только к одному сайту. Самым большим недостатком является то, что любой, у кого отключен JavaScript или куки, помечается как потенциальный спам. Это означает, что очереди на модерацию по-прежнему являются хорошей идеей.Теоретически это можно квалифицировать как безопасность через неясность, но на практике это отлично.
Я ни разу не видел, чтобы спамер пытался сломать эту технику , хотя может быть, раз в пару месяцев я получаю спам-запись по теме, вводимую вручную, и это немного жутковато.
У меня есть некоторые идеи, которыми я хотел бы поделиться с вами ...
Капча, в которой есть некоторые скрытые часть от пользователя, но полное изображение - это два кода вместе, поэтому программы OCR и фермы капчи считывают изображение, которое включает видимую и скрытую части, пытается декодировать их обе и не может отправить ... - у меня есть все готов исправить это и работать онлайн.
http://www.planethost.gr/IdeaWithHiddenPart.gif
Страница со множеством слов, которые человек должен выбрать правильное. Я тоже создал этот простой. Слова представляют собой кликабельные изображения, и пользователь должен щелкнуть по правильному.
http://www.planethost.gr/ManyWords.gif
То же, что и предыдущая, но с div и текстами или маленькими иконками. Пользователь должен щелкнуть только один правильный div / букву / изображение, что бы там ни было.
http://www.planethost.gr/ArrayFromDivs.gif
И еще одна моя CicleCaptcha , пользователь должен найти точку на изображении . Если он его найдет и щелкнет, значит, человек, машины, вероятно, выйдут из строя или ему нужно создать новое программное обеспечение, чтобы найти способ справиться с этим.
http://www.planethost.gr/CicleCaptcha.gif
Любые критики приветствуются.
Как насчет использования самого сообщества для двойной проверки, что все здесь люди, то есть что-то вроде сети доверия? Чтобы найти одного действительно заслуживающего доверия человека, который запустит Интернет, я предлагаю использовать эту CAPTCHA, чтобы убедиться, что он абсолютно и на 100% человек.
Rapidshare CAPTCHA - гипотеза Римана http://codethief.eu/kram/_/rapidshare_captcha2.jpg
Конечно, есть крошечный шанс, что он был бы слишком занят подготовкой своей речи на Филдсовской медали, чтобы помочь нам создать паутина доверия, но хорошо ...
Просто заставьте пользователя решить простые арифметические выражения:
2 * 5 + 1
2 + 4 - 2
2 - 2 * 3
и т. Д.
Как только спамеры поймают на себе внимание, их будет довольно легко обнаружить. Каждый раз, когда обнаруженный спаммер запрашивает, переключайтесь между следующими двумя командами:
import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby
Очевидно, причина, почему это работает, заключается в том, что все спамеры достаточно умны, чтобы использовать eval
для решения капчи в одной строке кода.
Что относительно того, чтобы отобразить капчи с помощью разработал элементы HTML как отделения? Легко создать прямоугольные регионы формы букв и трудно проанализировать их.
Лучшие системы КАПЧИ - те, которые злоупотребляют проблемами P=NP в информатике. Проблема естественного языка является, вероятно, лучшей, и также самой легкой этих проблем злоупотребить. Какой-либо вопрос, который является соответствующим простым запросом Google с определенным исследованием (т.е. Какова вторая планета в нашей солнечной системе? хороший вопрос, тогда как 2 + 2 =? не), достойный кандидат в той ситуации.