Проблемы с PHP и Mysql запросами с использованием шифрования md5 - PullRequest
0 голосов
/ 15 февраля 2011

Я использую обычный запрос вставки php / mysql и использую md5 для шифрования пароля

Это запрос INSERT:

$sql = mysql_query("INSERT INTO user (username, password, role, approved) values ('".$username."', '".md5($password)."', 'user', '0')");

И это мой запрос SELECT, который я используюдля моей проверки входа в систему:

$sql = "SELECT id, username, password, role, approved FROM user WHERE username = '".$username."' AND password = '".md5($password)."'";

$result = mysql_query($sql);

Но когда я проверяю введенный пароль и пароль входа, он возвращает 2 разных значения, даже если я даю одинаковые значения.

Может ли кто-нибудь помочь мнерешить эту проблему?

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

Здесь применимы многие типичные предостережения ... упоминать их не повредит.

Во-первых, vanilla md5 для хеширования вашего пароля, безусловно, не лучший способ защитить ваш пароль пользователя в базе данных.,Существует множество вопросов о стековом потоке, которые документируют лучшие подходы, и, хотя существуют разные мнения, они все более безопасны, чем обычный md5, несоленый хеш.

Безопасный хеш и соль для паролей PHP

Почему бы не использовать AES для шифрования паролей в PHP?

Кроме того, вы не выполняете дезинфекцию входных данных sql, оставляя базу данных открытой для атак внедрения sql.Неудобный пользователь может манипулировать вашей вставкой, чтобы удалить таблицы или изменить структуру данных.Вам необходимо экранировать эти значения с помощью mysql_real_escape_string () или использовать совершенно другую систему доступа к базам данных, например PDO, с параметризованным sql.

Как я могу предотвратить внедрение SQL в PHP?

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

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

Надеюсь, это поможет - внедрение SQL может быть особенно неприятным!

1 голос
/ 15 февраля 2011

Предполагая, что $username и $password на самом деле одинаковы ... проверили ли вы, чтобы убедиться, что длина таблицы users длины столбца password достаточно велика для хранения всего хеша MD5?

Есть пример рассчитанных и сохраненных MD5 хешей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...