2016-08-29 1 views
0

password varchar(120)паролей, проведение различных данных (PhpMyAdmin Database)

Выше column name и datatype для пароля, который я установил. Я использую базу данных phpMyAdmin и создал пользователя для тестирования с userTest как имя пользователя и user123 как пароль. Когда я проверил назад базу данных, вместо того, чтобы держать user123 в качестве пароля, он держит что-то вроде 0dcbd056919392554f346a10cc114d27. По сравнению с базой данных SQL Server база данных SQL Server будет содержать точные данные для пароля, введенного пользователем при регистрации.

Несмотря на это, я все еще могу войти, используя user123 в качестве пароля для пользователя userTest. Если я использовал 0dcbd056919392554f346a10cc114d27 как пароль, я не смог войти в систему. Я только что заметил это и начал задаваться вопросом, как администратор, как я буду знать пароль пользователя точно так же, как тот, который они использовали для регистрации, если я просматриваю базу данных?

+0

Как вы создаете учетную запись пользователя? Поскольку вы храните в стандартном varchar и используете phpMyAdmin для вставки, пароль должен храниться в виде открытого текста, что означает, что вы используете функцию или какие-либо другие средства для хеширования пароля перед вставкой. –

ответ

1

Почему на Земле вам нужно знать пароль пользователя? Это поистине ужасная идея. Я явно не хочу знать пароли моего пользователя или иметь средства для их расшифровки. Есть много причин, почему это плохая идея, одна из них заключается в том, что если пользователь повторно использует пароли, а ваша база данных скомпрометирована, тогда пароль открытого текста пользователя был скомпрометирован.

Что более распространено в том, чтобы хэш-пароль; используя пароль пользователя в сочетании с криптографической солью и вводить их в качестве входных данных для хеш-функции (я считаю, что bcrypt наиболее распространен в наши дни, но ваши требования могут отличаться). Функция возвращает некоторую бессмысленную строку, например $ 2a $ 06 $ XKJbhsfB4q53MovNJRgEuOkQKpnOIpjfQ7P8qMUWa63qGeHnPlyMu, которую вы затем сохраняете в базе данных. Когда пользователь пытается войти в систему, вы повторяете процесс хеширования и сравниваете результат со значением, хранящимся в базе данных.

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

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

Но так или иначе, чтобы прямо ответить на ваш вопрос, вы не храните здесь текстовое значение. Я не могу понять, что вы делаете, когда вводите пароль пользователя, но, очевидно, вы выполняете какую-либо функцию в поле varchar. Возможно, вы выбрали одну из функций из раскрывающегося списка на странице вставки phpMyAdmin (см. Снимок экрана ниже); это применит выбранную функцию MySQL к данным при ее вставке. Вероятно, нет никакой другой веской причины, по которой phpMyAdmin будет искажать ваши данные, как это, что кажется наиболее вероятным.

phpMyAdmin function dropdown