Функция пароля MySQL

Является ли хорошей или плохой практикой использование функции паролей MySQL для хэш-паролей, используемых приложением? Я вижу плюсы и минусы. Мне любопытно, существует ли общее мнение о том, хорошо это или плохо.

Ответы

Ответ 1

Документы для MySQL PASSWORD():

Функция PASSWORD() используется системой аутентификации в MySQL Server; вы не должны использовать его в своих приложениях.

Прочитайте " Вероятно, вы храните пароли неверно, чтобы лучше советоваться с хэшированием и хранением паролей.

MD5 и SHA-1 считаются слишком слабыми для использования для паролей. В настоящее время рекомендуется использовать SHA-256.

Я внес пакет в MySQL для поддержки функции SHA2(), и патч был принят, но поскольку их дорожная карта изменила его, очистить, когда он превратится в выпущенный продукт.

Тем временем, вы можете использовать хэширование и соление на вашем языке программирования и просто хранить хэш-результат результата в базе данных. Если вы используете PHP, SHA-256 доступен в hash().

обновление: MySQL 5.5.8 был выпущен в декабре 2010 года, и этот выпуск содержит поддержку SHA2().

Ответ 2

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

Ответ 3

Я считаю, что фактическая функция PASSWORD в MySQL небезопасна и была сломана, но я не могу найти ссылку на данный момент. Я знаю, что старший (OLD_PASSWORD в 5 и выше) определенно небезопасен.

Конечно, все пароли всегда должны храниться с солью (для дальнейшего безвестности). Пример:

UPDATE users SET password=MD5(CONCAT('salt', 'user provided value')) WHERE id=54

Существует также функция MD5, но с ростом колоссальных радужных таблиц она не на 100% надежна как способ полного обфускации сохраненных паролей.

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

<?php
$password = sha1(SALT.$_POST["password"]);
$sql = "UPDATE users SET password='".$password."' WHERE id=54";
?>