Подтвердить что ты не робот

Каковы наилучшие правила для того, какие символы разрешить в пароле?

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

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

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

Во всяком случае, существуют ли какие-либо стандартные рекомендации для длины, допустимых символов и т.д.?

Я не уверен, если это имеет значение, но я буду использовать ASP.NET w/С#

4b9b3361

Ответ 1

В паролях обычно разрешается использовать любой символ ASCII без пробелов ASCII (от 33 до 126 включительно). Многие специалисты по безопасности (и комментаторы SO) рекомендуют использовать passphrase вместо пароля, поэтому вам придется разрешать пробелы, Аргумент состоит в том, что из-за их длины, и поскольку фразы не содержатся в словаре, фразы с фразами более сложно взломать, чем пароли. (Кодовая фраза также может быть легче запомнить, поэтому законному пользователю не нужно записывать ее на липкой заметке прямо на своем мониторе.)

Некоторые сильные генераторы паролей используют хэш, поэтому я поставил бы очень высокий предел по длине (512 или 1024), чтобы быть включительно. Генераторы паролей сегодня часто дают строки 32-128 символов, но кто знает, какие хеши будут использоваться в ближайшие несколько лет.

Ответ 2

Не-ASCII-символы, безусловно, усложняют задачу ввода пароля на ограниченных устройствах (мобильные телефоны, консоли и т.д.), но обычно это невозможно. Возможно, если пользователь захочет это сделать, вы должны их оставить. Достаточно легко сделать разумную и последовательную вещь - например, кодировать в UTF-8 перед хэшированием. Вам придется только столкнуться с трудностями, если какое-либо устройство ввода отправило символы в качестве композиции (например, e + острый акцент вместо "e sharp" ), но я подозреваю, что этого не произойдет в реальной жизни. (Вы могли бы разложить все самостоятельно, но это было бы большой проблемой, чтобы пойти на краевой случай.)

Я бы ограничил его печатными символами. Ввод вкладок, фидов форм и т.д. В пароль действительно требует проблем.

Ответ 3

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

Ответ 4

В сущности, большинство классов символов unicode должно быть разрешено. Однако пропустите контрольные символы (например, 0-31, кроме пробела), отметку порядка байтов (0xfffe и oxfeff). Кроме того, вы хотите сначала канонизировать представление, чтобы избавиться от проблем, вызванных различными представлениями. Вы можете выпускать предупреждения, хотя для символов, которые, кажется, слишком сложно ввести, но пользователи будут защищать их от них.

Ответ 5

Короткий ответ: разрешите столько, сколько поддерживает система, которую он может поддерживать. В настоящее время действительно нет оправдания, чтобы не использовать полную поддержку unicode для ввода текста, и это включает в себя пароли. Я не думаю, что вам нужно беспокоиться о проблемах с персонажами, пока они обрабатываются буквально (но я не профессионал в этой области - остерегайтесь SQL-инъекции).

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

Если вам нужен максимальный размер поля (например, для хранения в базе данных), попробуйте сделать его достаточно большим для всего, что люди будут печатать вручную. Там действительно нет такой вещи, как слишком большое поле пароля, так как всегда есть возможность использовать автоматизированный, сгенерированный надежный пароль, но, конечно, будет достаточно от 64 до 128 символов.

Ответ 6

Помните: когда вы храните пароли, все пароли должны быть зашифрованы с помощью однонаправленного алгоритма, такого как md5 sha1. Поскольку эти алгоритмы всегда дают шестнадцатеричные числа, вам не нужно беспокоиться о SQL-инъекциях или что-то в этом роде.

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

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

Все это взвешивается в диапазоне символов "printable" ascii.