Сейчас я регистрируюсь на сайте страховой компании, и мой пароль состоит из 16 символов, в нем используется большое количество букв, цифр, специальных символов и т.д. Однако вот их список ограничений:
Обратите внимание на свой пароль:
- должен состоять из 6-12 символов
- не должны содержать пробелы, специальные/международные символы
- не должны содержать ваше имя пользователя, имя или фамилию
- чувствителен к регистру
- должен содержать как минимум 1 цифру и 1 букву
Я могу понять минимальные 6 символов, запрет на части имени, чувствительность к регистру и необходимость наличия хотя бы одной цифры и буквы. Непонятным для меня является ограничение выбора символов, которые вы можете использовать, и наличие верхней границы.
Почему веб-сайты так поступают? Единственное, что я могу придумать, это то, что они не знают основ хэширования пароля, что защитило бы его лучше, чем что-либо другое, и избавило бы от любых проблем безопасности.
Если я решил ввести DELETE FROM users WHERE 1=1
в качестве пароля, мне должно быть позволено это сделать. MD5-хэш PHP станет fe5d54132b51b7d65ab89b739b600b4b
, что, как мне кажется, ничему не повредит.
Это сводится к тому, что их программисты (или их руководство) ленивы и/или необразованны. Не требуется много усилий, чтобы заставить вашу систему принимать любые символы, но это означает, что вам нужно потратить некоторое время на размышления об атаках с помощью SQL-инъекций, межсайтовых сценариях, чтобы убедиться, что все части системы могут справиться с этим. и т. д. Может быть дешевле и быстрее просто запретить любые символы, которые могут быть проблемой.