Обычно не рекомендуется использовать собственный уровень хэширования. Я уверен, что md5 будет в порядке, если вы просто делаете действительно крошечный сайт для учебных целей, но если вы храните важную информацию для более крупного сайта, вы должны использовать библиотеку, такую как PHPass:
Спасибо в Jacco для этого PHPass фрагмента кода:
require('PasswordHash.php');
$pwdHasher = new PasswordHash(8, FALSE);
// $hash is what you would store in your database
$hash = $pwdHasher->HashPassword($password);
// $hash would be the $hashed stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
Если вы настаиваете на делать это самостоятельно, вы должны соль паролей. См. http://phpsec.org/articles/2005/password-hashing.html.
define('SALT_LENGTH', 9);
function generateHash($plainText, $salt = null)
{
if ($salt === null)
{
$salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
}
else
{
$salt = substr($salt, 0, SALT_LENGTH);
}
return $salt . sha1($salt . $plainText);
}
Причина разницы между GET и POST заключается в том, как браузер интерпретирует запросы. Как упоминалось выше, веб-сканеры не будут выполнять POST-запросы. Но представьте, что вы отправились на страницу своего сайта http://example.com/deleteuser.php?userid=25
, чтобы удалить неприятный спамер. Затем вы закроете свой браузер. В следующий раз, когда вы вернетесь, firefox снова откроет эту страницу, и вы, к сожалению, удалили пользователя, который только что зарегистрировался!
Другая причина для GET против POST - частичная профилактика против cross-site request forgeries.Если у вас была страница, в которой пользователь выходил из запроса GET, кто-то мог встроить тег изображения в комментарий или сообщение в форуме, например <img src="http://example.com/logout.php" />
, и браузеру пришлось бы выполнить операцию выхода из системы. Таким образом, любой пользователь, который просмотрел эту страницу, будет выведен из системы, даже если они были администратором.
Редактировать: В стороне, вы должны, вероятно, использовать sha-256 или bcrypt вместо md5, который был взломан (?).
Не используйте md5, если вам нужна реальная безопасность, столкновение с Google MD5, используйте что-то со стандартом sha2. –
ОК, но я думаю, что остальная часть вопроса остается в силе, верно? – chustar
Столкновение md5 на самом деле не актуально, когда речь заходит о теме хэширования паролей, не так ли? Это больше относится к дайджесту сообщений, и даже тогда он на самом деле не был широко использован в реальном мире AFAIK. Я имею в виду, конечно, использовать SHA, но я никогда не слышал о том, что схема хэширования пароля скомпрометирована из-за слабостей MD5. –