Правильный способ дезинфицировать пароль? - PullRequest
3 голосов
/ 22 марта 2011

Как я могу очистить строку, которая получает хэш + случайную соль?

Я могу удалить пробелы, проверить длину и использовать mysqli_real_escape_string, но достаточно ли этого?Filter_var действительно полезен, но не может помочь в этом случае, верно?

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Если вы собираетесь поместить переменную в SQL-запрос, то вам нужно либо вызвать mysqli_read_escape_string, либо (еще лучше!) Использовать подготовленные операторы .

Нет никакой другой дезинфекции, которую нужно сделать. Однако, если значение будет поступать из пользовательского ввода произвольной формы (например, текстовое поле вместо выпадающего меню), вы также можете обрезать пробел и использовать его в нижнем регистре в качестве любезности для пользователя (чтобы исправить случайные ошибки, которые они могут совершить) , Это действительно зависит от приложения.

1 голос
/ 22 марта 2011

Просто чтобы прояснить, вы получаете из ненадежного источника хеш (фактически случайные данные) + соль (фактически случайные данные), и вы хотите его «очистить»? Вероятно, существует подходящее определение здравомыслия (формат данных, такой как кодировка base64, максимальная / ожидаемая длина), но я сильно подозреваю, что где-то там есть ошибка функциональной безопасности.

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

0 голосов
/ 22 марта 2011

Сначала проверьте, что пароль соответствует заданным вами правилам проверки. Вы можете использовать регулярное выражение для этого. Часто пароли могут соответствовать a-z, 0-9, возможно, пунктуации и должны быть в пределах определенной длины - скажем, 6-12 символов. Используйте preg_match(), чтобы проверить строку для ее содержимого и длины. Что-то вроде preg_match('/^[a-z0-9]{6,12}$/i',$pass) может быть началом.

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

Наконец, для сохранения пароля, да, использование mysqli_real_escape_string() сделает все возможное, чтобы подготовить его для использования в операторе вставки или обновления SQL.

...