2010-07-03 3 views
7

Есть ли что-то особенное в отношении символов, которые должны быть разрешены/запрещены в пароле?Запрет символов в пароле?

Я хранил пароль в db hashed/salted и использовал PDO для предотвращения инъекции. Что я делаю достаточно? Недавно я наткнулся на систему, которая запретила ряд персонажей, не помню их всех, но один был амперсандом &. Они делали это по причинам, связанным с внедрением базы данных, или что-то еще мне не хватает? Должны ли символы паролей ограничиваться определенным набором символов или нет необходимости?

+2

Я не помню, чтобы какой-либо символ был проблемой, если вы используете заполнители, но я могу ошибаться, поскольку я не знаю всего рейнджера и других языков ... но, возможно, если вы используете UTF-8 и placeholder, это должно быть достаточно, чтобы принять что-либо. – Prix

ответ

9

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

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

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

Простой предел скорости в системе входа в систему (например, отказ в доступе в течение 15 минут после 3 неудачных попыток входа в систему) убирает грань с более грубой угрозы.

Не нужно соглашаться на 100% с этим, но я нашел эту провокационную статью по этому вопросу из Microsoft Research очень интересной. So Long, And No Thanks for the Externalities: The Rational Rejection of Security Advice by Users

Из реферата:

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

+3

+1 для не форсирования. =) –

+5

+1 без ограничений. Я не доверяю сайтам, которые чувствуют необходимость ограничить мой пароль - это заставляет меня задаться вопросом, почему они чувствуют необходимость ограничить его и как они его хранят. – Mike

+4

Списание сложного пароля не так рискованно, как не записывать ваш слабый или «легко угадать» пароль. Большинство атак производится удаленно. Если у людей есть доступ к вашему рабочему столу, где записан ваш пароль, они также будут иметь физический доступ к вашему компьютеру с помощью файлов cookie, которые позволят вам войти в систему. То есть, если вы не зашифруете свой жесткий диск, но я не знаю, -geek, который делает это. Я не думаю, что система блокировки - хорошая идея. Слишком просто сделать DoS против ваших пользователей. Все, что мне нужно сделать, это сделать несколько неудачных попыток вашей учетной записи заблокировать вас. –

2

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

Если вам нужны ограничения, они должны только требовать, чтобы они были более сложными, а не less.

+2

«специальные символы, в том числе те, которые не включены в клавиатуру», как? –

+1

на большинстве клавиатур, эти буквы не отображаются: æøå –

+1

@Alix Axel: Случайные символы юникода или вещи с chr (c)> 127. Мой пароль длинный и случайным образом сгенерирован. Они хранятся в зашифрованной базе данных на моем компьютере (специально для KeePassX). –

2

Единственное, что я запрещаю/разделяю пароли, - это пробел, нет причин для того, чтобы перебирать что-либо еще.

+3

Мм, я бы сказал, что это зависит от целевой аудитории предлагаемого вами сервиса. Если они будут путешественниками, я буду осторожен. Скажите, что вы находитесь в отпуске в стране, где ваши местные Umlauts ('äöüß' в моем случае) недоступны на клавиатуре. Большинство людей не знают коды Alt + xyz для их получения. Это не ваша вина, что они выбрали неверный пароль в этом случае, но это может сделать все хорошо, чтобы предотвратить это. –

+3

В Португалии мы не используем Umlauts для любого слова, кроме всех клавишных cömë. Тем не менее, люди не глупы, если они выбирают пароль с помощью Umlauts, они должны знать, как их получить (возможно, через экранную клавиатуру или карту символов). Я ненавижу веб-сайты, которые ограничивают пароли альфа-цифрами, более широкую и интернационализированную кодировку можно изучать, но я сомневаюсь, что она будет принята/запомнена всеми. –

+2

интересно о раскладке клавиатуры на португальском языке! Тем не менее, есть так много умляутов, которые недоступны в других местах. Я легко вижу, как немецкий пользователь выбирает пароль, содержащий 'ß', а затем не может войти в свой E-Mail в интернет-кафе на Майорке. Большинство пользователей не знают, как получить карту символов - сайт должен будет предоставить клавиатуру для входа в систему ... Я согласен с вами, хотя предельная длина и запрет прописных букв просто глупы. –

2

Когда я ввожу пароли, я обычно люблю писать длинные предложения, которые я могу вспомнить вместо р»% &/k1 или тому подобное.

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

+3

Вы не поверите, но один из основных интернет-провайдеров в моей стране ограничивает пароли от 6 до 8 символов 0-9a-z. Они даже не допускают прописных букв, я получаю от них глупость. –

0

Я только запрещаю символы, которые не могут быть напечатаны на стандартной клавиатуре. Нет причин, по которым пользователь не может выбрать безопасный пароль с 26 прописными и строчными буквами, 10 цифрами и 20 символами.

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

0

Не связывайтесь с паролем пользователя.

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

В качестве примеров я пришел с такими глупыми правилами, как пароли, ограничиваясь 4 цифрами (!!!), только буквенные символы (az), а некоторые академические сайты молча усекают пароли до 10 символов при регистрации, а затем не работают вы пытались войти с длинным паролем.

+0

как я в конечном итоге ответил на недельный вопрос с уже принятым ответом? – asr

0

Я наткнулся на этот вопрос, проведя некоторое исследование, и я думал, что должен внести свой вклад.

На самом деле, я считаю, что пароли должны быть не принимать любые символы. Проблема может возникнуть с символами, которые не относятся к стандартной таблице ASCII.

Возьмем, к примеру, буква ü (в нижнем регистре у с умляут):

  • В расширенном формате ASCII, что символ 0x81.
  • В ISO-8859-1 (очень распространенный в западных странах) это 0xFC.
  • В UTF-8 ü имеет элемент кода U + 00FC, и, следовательно, может быть представлен в виде 0xC3BC
  • В UTF-8 символ может быть также не нормируется, хотя. Таким образом, он может состоять из символа умлаута (только ¨) плюс u: результатом является другая другая последовательность байтов.

Во всех случаях над хешем для пароля будет отличаться, и логин завершится неудачно.

Возможное решение, позволяющее любому символу Юникода гарантировать, что вся страница использует UTF-8 повсюду и нормализует пароли (например, с режимом NFC) перед их хэшированием.
Однако в этот момент может быть проще просто запретить любой символ, который не является частью стандартной таблицы ASCII: байты 0x00-0x7F или (еще лучше, дескрипторы управления и другие не представимые плюс символы перевода строки) 0x20-0x7E.

Смежные вопросы