Обычно не рекомендуется реализовывать свой собственный слой хеширования. Я уверен, что с 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 является частичное предотвращение подделок межсайтовых запросов . Если у вас была страница, на которой пользователь вышел из системы по запросу GET, кто-то мог бы вставить тег изображения в комментарий или сообщение на форуме, например <img src="http://example.com/logout.php" />
, и браузер был бы вынужден выполнить операцию выхода из системы. Таким образом, любой пользователь, просмотревший эту страницу, выйдет из системы, даже если он будет администратором.
Редактировать: В качестве отступления, вы, вероятно, должны использовать sha-256 или bcrypt вместо md5, который был взломан (? ).