Я придумал решение, которое работает, но не красиво. Я использовал пакет 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 .
Я чувствую, что у есть , чтобы быть лучшим способом сделать это.
Мое предложение было бы капчой ASCII, оно не использует изображение, и это - программист / гиковский. Вот реализация PHP http://thephppro.com/products/captcha/ , этот - заплаченный. Существует свободное, также реализация PHP, однако я не мог найти пример-> http://www.phpclasses.org/browse/package/4544.html
, я знаю, что они находятся в PHP, но я уверен Вы, умные парни, создающие ТАК, могут 'портировать' его на Ваш любимый язык.
Я недавно (не может помнить, где), видел систему, которая показала набор изображений. Каждому из изображений присвоили символ ему. Пользователя тогда попросили ввести в символах для некоторых изображений, которые показали примеры некоторой категории (автомобили, компьютеры, здания, цветы и так далее). Изображения и символы изменились каждый раз, а также категории для создания строки КАПЧИ.
единственной проблемой является более высокая пропускная способность, связанная с этим подходом, и Вам нужно много изображений, которые классифицированы в категориях. Нет никакой потребности потратить впустую много ресурсов, генерирующих изображения.
Я думаю, что они работают над регулировкой. Это имело бы больше смысла только, чтобы отключить КАПЧУ для пользователей с 500 + представитель и сбросить представителя взломщиков.
Как насчет того, чтобы показать девять случайных геометрических фигур и попросить, чтобы пользователь выбрал эти два квадрата, или два круга или что-то.. должно быть довольно легко записать, и простой в использовании также..
нет ничего худшего, чем наличие текста, который Вы не можете прочитать правильно...
@rob
Что относительно капчи ловушки? Ничего себе, настолько простой! Хорошие взгляды! Хотя они выделили проблему доступности.. Вы думаете, что это было бы проблемой в ТАК? Мне лично трудно вообразить разработчиков/программистов, которые испытывают затруднения при чтении экрана в точку, где им нужна программа экранного доступа?
существуют разработчики, которые не являются просто юридически слепыми, но и на 100% слепыми. Обход тростника и собаки помощника. Я надеюсь, что сайт будет поддерживать их разумным способом.
Однако с капчой ловушки, можно поместить скрытое отделение также, которое говорит им покидать поле пробел. И можно также поместить его в сообщение об ошибке, если они действительно заполняют его, таким образом, я не уверен, сколько из доступности проблемы действительно здесь. Это является определенно не большим, но это могло быть хуже.
Одним путем я знаю об избавиться от ботов, должен сохранить ключ в cookie пользователя и если ключ или cookie не делают существующий, предполагают, что они - бот и игнорируют их или отступают в КАПЧЕ изображения. Это - также действительно хороший способ предотвратить набор сессий/отслеживания, создаваемых для ботов, которые могут добавить много шума к Вашему DB или наверху к Вашей производительности системы.
@pc1oad1etter я также заметил это после выполнения моего сообщения. Однако это - просто идея а не фактическая реализация. Варьируясь шрифт или использование различных цветов вместо полужирного / курсива легко решили бы проблемы удобства использования.
Мое решение состояло в том, чтобы поместить форму на отдельной странице и передать метку времени ей. На той странице я только отображаю форму, если метка времени допустима (не слишком быстро, не слишком стара). Я нашел, что боты будут всегда поражать страницу представления непосредственно, и только люди перешли бы там правильно.
не будет работать, если у Вас будет форма на самой странице содержания как Вы, делают теперь, но Вы могли показать/скрыть ссылку на специальную страницу представления на основе NoScript. Незначительный inconvienience для такого небольшого процента пользователей.
Используйте простую текстовую КАПЧУ и затем попросите, чтобы пользователи ввели ответ назад или только первую букву или последнее, или другая случайная вещь.
Другая идея состоит в том, чтобы сделать изображение ASCII, как это (от Портала игровой последовательности конца):
.,---.
,/XM#MMMX;,
-%##########M%,
-@######% $###@=
.,--, -H#######$ $###M:
,;$M###MMX; .;##########$;HM###X=
,/@##########H= ;################+
-+#############M/, %##############+
%M###############= /##############:
H################ .M#############;.
@###############M ,@###########M:.
X################, -$=X#######@:
/@##################%- +######$-
.;##################X .X#####+,
.;H################/ -X####+.
,;X##############, .MM/
,:+$H@M#######M#$- .$=
.,-=;+$@###X: ;/=.
.,/X$; .::,
., ..
И дают пользователю некоторые опции как: A, ЛГИТЕ, РАЗБИТОЕ СЕРДЦЕ, ПИРОГ.
Просто будьте осторожны относительно культурной предвзятости в любой основанной на вопросе КАПЧЕ.
Одна вещь, которая является экранирующей, состоит в том, как Google, по-видимому, компания с большинством докторов философии CS в мире могла повредить их Капчу и, казаться, ничего не делала с этим.
Какой цвет является пятым словом этого предложения? красный?, синий, зеленый?
(окрашивают слова соответственно)
Вы не только хотите людей, отправляющих. Вы хотите людей, которые могут обсудить темы программирования. Таким образом, у Вас должна быть капча мелочей с вещами как:
, Что делает следующее среднее объявление функции C: char *(*(**foo [][8])())[];
?
=)
Я рекомендую вопросы о мелочах. Не все могут понять представления ASCII букв, и вопросы о математике больше чем с одной операцией могут стать сбивающими с толку.
Изображение могло быть создано на стороне клиента из основанной на векторе информации, переданной с сервера.
Это должно уменьшить обработку на сервере, и объем данных передал провод.
У меня есть несколько решений, то, которое требует JavaScript и другого, который не делает. Обоих более трудно победить, чем, что является 7 + 4, все же они не так тверды к глазам плакатов как reCaptcha. Я предложил эти решения, так как у меня должна быть капча для AppEngine, который представляет более ограниченную среду.
Так или иначе вот ссылка на демонстрацию: http://kevin-le.appspot.com/extra/lab/captcha/
Я думаю, что изготовленная на заказ КАПЧА является Вашим лучшим выбором. Таким образом, это требует, чтобы специфически целенаправленный бот/сценарий взломал его. Этот фактор усилия должен сократить количество попыток. Люди являются ленивым afterall
Мне нравится капча, которая используется в «большой сети ромов»: текст ссылки
Нажмите на цветной смайлик, это смешно, и все могут понять ... кроме ботов, ха-ха
I really like the method of captcha used on this site: http://www.thatwebguyblog.com/post/the_forgotten_timesaver_photoshop_droplets#commenting_as
Я уверен, что большинство страниц построено с элементами управления (кнопки, ссылки и т. Д.), Которые поддерживают наведение курсора мыши.
Это просто другой подход, я фактически не реализовал этот подход. Но это возможно.
У меня возникла идея, когда я увидел видео о Human Computing (видео о том, как использовать людей для маркировки изображений в играх) для создания системы капчи. Можно использовать такую систему для пометки изображений (возможно, для какой-то другой цели), а затем использовать статистику о тегах для выбора изображений, подходящих для использования капчи.
Скажем, изображение, где> 90% людей пометили изображение с помощью ' кошка »или« небоскреб ». Затем можно было бы представить изображение с просьбой указать наиболее очевидную особенность изображения, которая будет доминирующим тегом для изображения.
Это, вероятно, выходит за рамки SO, но кому-то это может показаться интересной идеей :)
Here's my captcha effort:
The security number is a spam prevention measure and is located in the box
of numbers below. Find it in the 3rd row from the bottom, 3rd column from
the left.
208868391 241766216 283005655 316184658 208868387 241766212
241766163 283005601 316184603 208868331 241766155 283005593
241766122 283005559 316184560 208868287 241766110 283005547
316184539 208868265 241766087 283005523 316184523 208868249
208868199 241766020 283005455 316184454 208868179 241766000
316184377 208868101 241765921 283005355 316184353 208868077
Of course the numbers are random as is the choice of row and collumn and the choice of left/right top/bottom. One person who left a comment told me the 'security question sucks dick btw':
http://jwm-art.net/dark.php?p=louisa_skit
to see in action click 'add comment'.
Я написал код для довольно крупного новостного веб-сайта, возился с капчами и анализировал спам-роботов.
Все мои решения предназначены для малых и средних веб-сайтов (как и большинство решений в этой теме).
Это означает, что они предотвращают отправку сообщений спам-ботами, если только они не применяют специальный обходной путь для вашего веб-сайта (когда вы are big)
Я обнаружил одно довольно приятное решение: спам-бот не посещает вашу статью раньше 48 часов после того, как вы ее разместили . Поскольку статья на новостном веб-сайте получает больше всего просмотров через 48 часов после публикации, он позволяет незарегистрированным пользователям оставлять комментарии, не вводя капчу.
Еще одна хорошая система капчи, которую я видел, была создана WebDesignBeach .
У вас есть несколько объектов, и вы должны перетащить один в определенную зону. Довольно оригинально, не так ли?
Одна опция была бы внеполосной коммуникацией; сервер мог отправить пользователю мгновенное сообщение (или SMS-сообщение?), что он тогда должен ввести в поле капчи.
Это передает "альтернативное" требование к пользователю - или необходимо включить JavaScript, ИЛИ Вы должны быть зарегистрированы на своем предпочтительном сервисе IM. В то время как это, возможно, не столь гибко как некоторые из других решений выше, это работало бы на подавляющее большинство пользователей.
Те с полномочиями редактирования, не стесняйтесь добавлять к Профессионалам/Недостаткам вместо того, чтобы отправить отдельный ответ.
Профессионалы:
Недостатки:
Как насчет того, чтобы просто проверить, чтобы видеть, включен ли JavaScript?
Любой использующий этот сайт, конечно, собирается включить его. И от того, что говорят люди, Спам-роботам не включат JavaScript.
КАПЧИ проверяют, люди ли Вы или компьютер. Проблема состоит в том, что после этого компьютер должен судить, люди ли Вы.
, Таким образом, решение состояло бы в том, чтобы позволить одному пользователю заполнить КАПЧУ и позволить следующему пользователю проверить его. Проблемой является, конечно, разрыв времени.
Много этих решений JavaScript работает с программами экранного доступа? И изображения минус значимый атрибут высокого звука, вероятно, повреждаются WCAG.
@lance
, Кто говорит Вас, должен создать все изображения на сервере с каждым запросом? Возможно, Вы могли иметь статический список изображений или вытянуть их от Flickr. Мне нравится, "нажимают на котенка" идея КАПЧИ. http://www.thepcspy.com/kittenauth .
, Если Вы вытягиваете из статического списка изображений, это становится тривиальным для хитрости КАПЧИ, потому что человек может классифицировать их, и затем бот был бы в состоянии ответить на проблемы легко. Даже если бот не может ответить на всех них, он может все еще послать спам. Это только должно быть в состоянии ответить на маленький процент КАПЧЕЙ, потому что это может всегда просто повторять, когда попытка перестала работать.
Это - на самом деле проблема с загадками и таким также, потому что чрезвычайно трудно иметь большой набор проблем.
Как насчет того, чтобы просто использовать ASP.NET Ajax NoBot? Это, кажется, работает ПРИЛИЧНО на меня. Это не является удивительно большим, но достойным.