Действительно ли там что-то является особенным о символах, которые должны быть позволены/не позволенные в пароле?
Я храню пароль в дб, хешировал/солил, и используйте PDO для предотвращения против инжекции. То, что я делаю достаточно? Недавно я столкнулся с системой, которая запретила много символов, не помните всех их, но каждый был амперсандом &
. Они делали его по причинам инжекции антибазы данных, или есть ли что-то еще, что я пропускаю? Символы пароля должны быть ограничены определенным набором символов или никакой потребности?
Нет никаких технических причин запрещать любые символы в пароле. Думаю, в описанном вами случае они разрешат только буквенно-цифровые символы, чтобы избежать проблем на стороне пользователя (например, при вводе символа, недоступного на клавиатуре в другой стране).
Многие провайдеры и сайты заставляют пользователей выбирать очень сложные пароли, содержащие минимальное количество цифр и, иногда, дажеЬ специальных символов, чтобы предотвратить перебор или атаки по словарю.
Я не думаю, что заставлять людей выбирать сложные пароли - это разумно. Пароли, которые вы не можете запомнить, вы будете записывать где-нибудь, что в реальной жизни часто создает гораздо больший риск для безопасности.
Простое ограничение скорости в системе входа (например, отказ в доступе на 15 минут после 3 неудачных попыток входа) снимает угрозу перебора гораздо более элегантно.
Не обязательно соглашаться с этим на 100%, но я нашел этот провокационный документ на эту тему от Microsoft Research очень интересным. До свидания, и спасибо за внешние эффекты: The Rational Rejection of Security Advice by Users
Из аннотации:
Часто высказывается мнение, что пользователи безнадежно ленивы и немотивированны в вопросах безопасности. Они выбирают слабые пароли, игнорируют предупреждения о безопасности и не замечают на ошибки сертификатов. Мы утверждаем, что неприятие пользователями советов по безопасности, которые они получают, вполне рационально с экономической точки зрения. Советы предлагают защитить их от прямых затрат на атаки, но обременяет их но обременяет их гораздо большими косвенными затратами в виде усилий.
Когда я ввожу пароли, я обычно предпочитаю писать более длинные предложения, которые я могу запомнить, вместо p "% & / k1 или тому подобное.
Поэтому убедитесь, что вы позволяете своим пользователям писать пароли длиной более 10 знаков. Меня всегда расстраивает, когда я вынужден вводить короткий пароль со специальными символами вместо более длинного, который был бы более запоминающимся и безопасным.
Почему вы хотите ограничить количество символов в пароле? В любом случае вы должны выполнять какое-то хеширование. Мои пароли часто содержат специальные символы, в том числе те, которых нет на клавиатуре.
Если вам нужны ограничения, они должны только требовать, чтобы они были более сложными, а не менее .
Я запрещаю только символы, которые нельзя набрать на стандартной клавиатуре. Нет причин, по которым пользователь не может выбрать безопасный пароль из 26 прописных и строчных букв, 10 цифр и 20 символов.
Если вы используете систему входа на общедоступный сайт, вместо того, чтобы заставлять пользователей выбирать безопасный пароль, я бы рекомендовал использовать OpenID. Таким образом, пользователю не нужно запоминать новый пароль, который сложно запомнить только для вашего сайта.
Единственное, что я запрещаю / удаляю в паролях - это пробелы, нет причин запрещать что-то еще.
Не связывайтесь с паролем пользователя.
Просто убедитесь, что вы используете согласованную кодировку и правила на всех этапах обработки пароля. В вашем случае кодирование не должно быть проблемой, поскольку вы храните соли.
В качестве примеров я привел дурацкие правила, такие как ограничение паролей до 4 цифр (!!!), только буквенных символов (az), а также некоторые академические веб-сайты, которые молча усекают пароли до 10 символов при регистрации, а затем перестают работать, когда вы пытался войти с длинным паролем.