Genellikle kendi karma katman uygulamak için tavsiye edilmez. Ben sadece öğrenme amaçları için gerçekten küçük bir siteyi yapıyoruz md5 iyi olacak eminim, ama daha büyük bir site için önemli bilgiler saklıyorsanız sen gibi, bir kütüphane kullanmanız gerekir PHPass:
Bu PHPass kod parçacığı için Jacco için teşekkür ederiz:
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';
}
Kendiniz yapıyor ısrar ederse, gereken şifreleri tuz. Bkz 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 ve POST arasındaki farkın nedeni, tarayıcılar istekleri yorumlamak yoludur. Yukarıda belirtildiği gibi, web tarayıcılarının POST istekleri yürütmek olmaz. Ancak http://example.com/deleteuser.php?userid=25
kötü bir spam silmek için sitenizde bir sayfaya gittiğini düşünün. Sonra tarayıcınızı kapatın. Eğer firefox geri gelmek dahaki sefere o sayfayı yeniden açar ve ne yazık ki sadece kayıtlı kullanıcıyı sildim!
POST vs GET başka nedeni cross-site request forgeries karşı kısmi önlenmesidir. Eğer bir GET isteği kullanıcıyı dışarı açmış bir sayfa olsaydı, birisi <img src="http://example.com/logout.php" />
gibi bir yorum ya da forum sonrası içine bir resim etiketi embed olabilir ve tarayıcı çıkış işlemi yürütmek zorunda olacaktır. Yani o sayfayı inceledi herhangi bir kullanıcı onlar bir yönetici olsa bile, dışarı günlüğe olacaktır.
Edit: bir kenara, muhtemelen kırık olmuştur sha-256 veya Bcrypt yerine md5, kullanmalısınız (?).