Cara termudah untuk mengamankan skema penyimpanan kata sandi Anda adalah dengan menggunakan perpustakaan standar .
Karena keamanan cenderung menjadi jauh lebih rumit dan dengan lebih banyak kemungkinan yang tidak terlihat yang dapat dihadapi oleh sebagian besar programmer sendiri, menggunakan perpustakaan standar hampir selalu termudah dan paling aman (jika bukan satu-satunya) pilihan yang tersedia.
API kata sandi PHP baru (5.5.0+)
Jika Anda menggunakan PHP versi 5.5.0 atau lebih baru, Anda dapat menggunakan API hashing kata sandi baru yang disederhanakan
Contoh kode menggunakan API kata sandi PHP:
<?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';
}
(Jika Anda masih menggunakan legacy 5.3.7 atau yang lebih baru, Anda dapat menginstal ircmaxell / password_compat untuk memiliki akses ke fungsi-fungsi bawaan )
Memperbaiki hash asin: tambahkan lada
Jika Anda menginginkan keamanan tambahan, petugas keamanan sekarang (2017) merekomendasikan menambahkan ' lada ' ke hash kata sandi asin (otomatis).
Ada penurunan sederhana di kelas yang mengimplementasikan pola ini dengan aman, saya sarankan:
Netsilik / PepperedPasswords
( github ).
Muncul dengan Lisensi MIT, sehingga Anda dapat menggunakannya sesuka Anda, bahkan dalam proyek berpemilik.
Contoh kode menggunakan 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';
}
Perpustakaan standar LAMA
Harap dicatat: Anda seharusnya tidak membutuhkan ini lagi! Ini hanya di sini untuk tujuan sejarah.
Lihatlah: Kerangka kerja hashing kata sandi PHP portabel : phpass dan pastikan Anda menggunakan CRYPT_BLOWFISH
algoritma jika memungkinkan.
Contoh kode menggunakan phpass (v0.2):
<?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 telah diimplementasikan dalam beberapa proyek yang cukup terkenal:
- phpBB3
- WordPress 2.5+ dan juga bbPress
- rilis Drupal 7, (modul tersedia untuk Drupal 5 & 6)
- lainnya
Hal yang baik adalah Anda tidak perlu khawatir tentang perinciannya, perincian itu telah diprogram oleh orang-orang yang berpengalaman dan ditinjau oleh banyak orang di internet.
Untuk informasi lebih lanjut tentang skema penyimpanan kata sandi, baca posting blog Jeff : Anda Mungkin Menyimpan Kata Sandi Secara Tidak Benar
Apa pun yang Anda lakukan jika Anda menggunakan pendekatan ' Saya akan melakukannya sendiri, terima kasih ', jangan gunakan MD5
atau SHA1
lagi . Mereka adalah algoritma hashing yang bagus, tetapi dianggap rusak untuk tujuan keamanan .
Saat ini, menggunakan crypt , dengan CRYPT_BLOWFISH adalah praktik terbaik.
CRYPT_BLOWFISH dalam PHP adalah implementasi hash Bcrypt. Bcrypt didasarkan pada cipher blok Blowfish, menggunakan setup kunci yang mahal untuk memperlambat algoritma.