Parola saklama düzeninizi güvenli hale getirmenin en kolay yolu standart bir kitaplık kullanmaktır .
Güvenlik, çoğu programcının tek başına ele alabileceğinden çok daha karmaşık ve daha görünmez vidalama olasılıkları olduğundan, standart bir kitaplık kullanmak neredeyse her zaman en kolay ve en güvenli (tek olmasa da) mevcut seçenektir.
Yeni PHP şifre API'sı (5.5.0+)
PHP sürüm 5.5.0 veya daha yenisini kullanıyorsanız, yeni basitleştirilmiş parola karma API'sını kullanabilirsiniz
PHP'nin şifre API'sini kullanan kod örneği:
<?php
// $hash is what you would store in your database
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT, ['cost' => 12]);
// $hash would be the $hash (above) stored in your database for this user
$checked = password_verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
(Hala eski 5.3.7 veya daha yeni bir sürümü kullanıyorsanız, yerleşik işlevlere erişmek için ircmaxell / password_compat yükleyebilirsiniz )
Tuzlanmış karmaların iyileştirilmesi: biber ekleyin
Ekstra güvenlik istiyorsanız, şimdi güvenlik görevlileri (2017) (otomatik olarak) tuzlanmış şifre karmasına bir ' biber ' eklemenizi tavsiye ediyor.
Bu modeli güvenli bir şekilde uygulayan basit, sınıfta bir düşüş var, ben tavsiye ederim:
Netsilik / PepperedPasswords
( github ).
Bir MIT Lisansı ile birlikte gelir, böylece özel projelerde bile istediğiniz gibi kullanabilirsiniz.
Kod örneği Netsilik/PepperedPasswords
:
<?php
use Netsilik/Lib/PepperedPasswords;
// Some long, random, binary string, encoded as hexadecimal; stored in your configuration (NOT in your Database, as that would defeat the entire purpose of the pepper).
$config['pepper'] = hex2bin('012345679ABCDEF012345679ABCDEF012345679ABCDEF012345679ABCDEF');
$hasher = new PepperedPasswords($config['pepper']);
// $hash is what you would store in your database
$hash = $hasher->hash($_POST['password']);
// $hash would be the $hash (above) stored in your database for this user
$checked = $hasher->verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
OLD standart kütüphanesi
Lütfen dikkat: artık buna ihtiyacınız olmamalı! Bu sadece tarihi amaçlar için burada.
Bir göz atın: Taşınabilir PHP şifre karma çerçeve : phpass ve CRYPT_BLOWFISH
mümkünse algoritmayı kullandığınızdan emin olun .
Phpass (v0.2) kullanan kod örneği:
<?php
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 $hash (above) stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
PHPass oldukça iyi bilinen bazı projelerde uygulanmıştır:
- phpBB3
- WordPress 2.5+ ve BBPress
- Drupal 7 sürümü, (modül Drupal 5 ve 6 için kullanılabilir)
- diğerleri
İyi olan şey, ayrıntılar hakkında endişelenmenize gerek olmamasıdır, bu ayrıntılar deneyimli kişiler tarafından programlanmış ve internetteki birçok kişi tarafından incelenmiştir.
Şifre saklama şemaları hakkında daha fazla bilgi için Jeff`in blog gönderisini okuyun : Muhtemelen Şifreleri Yanlış Saklıyorsunuz
' Ben kendim yapacağım, teşekkür ederim ' yaklaşımına giderseniz , kullanmazsanız MD5
ya da SHA1
artık kullanmazsanız ne yaparsanız yapın . Bunlar güzel karma algoritmasıdır, ancak güvenlik nedeniyle kırılmış olarak kabul edilir .
Şu anda, CRYPT_BLOWFISH ile crypt kullanmak en iyi uygulamadır.
PHP'deki CRYPT_BLOWFISH, Bcrypt karmasının bir uygulamasıdır. Bcrypt, algoritmayı yavaşlatmak için pahalı anahtar kurulumundan yararlanarak Blowfish blok şifresini temel alır.