วิธีที่ง่ายที่สุดในการทำให้รหัสผ่านของคุณปลอดภัยนั้นคือการใช้ไลบรารี่มาตรฐาน
เนื่องจากการรักษาความปลอดภัยมีแนวโน้มที่จะซับซ้อนมากขึ้นและมีความเป็นไปได้ที่มองไม่เห็นมากกว่าโปรแกรมเมอร์ส่วนใหญ่สามารถจัดการเพียงอย่างเดียวการใช้ไลบรารีมาตรฐานจึงเป็นวิธีที่ง่ายที่สุดและปลอดภัยที่สุด (ถ้าไม่ใช่)
API รหัสผ่าน PHP ใหม่ (5.5.0+)
หากคุณใช้ PHP เวอร์ชัน 5.5.0 หรือใหม่กว่าคุณสามารถใช้ API การแฮชรหัสผ่านแบบง่าย
ตัวอย่างของรหัสโดยใช้รหัสผ่าน API ของ 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';
}
(ในกรณีที่คุณยังคงใช้งานแบบดั้งเดิม 5.3.7 หรือใหม่กว่าคุณสามารถติดตั้งircmaxell / password_compatเพื่อให้สามารถเข้าถึงฟังก์ชั่นบิวด์อิน)
ปรับปรุงเมื่อ hashes เค็ม: เพิ่มพริกไทย
หากคุณต้องการความปลอดภัยเป็นพิเศษผู้รักษาความปลอดภัยในขณะนี้ (2017) ขอแนะนำให้เพิ่ม ' พริกไทย ' ลงในการแฮชรหัสผ่าน (โดยอัตโนมัติ)
มีคลาสดร็อปง่ายที่ใช้รูปแบบนี้อย่างปลอดภัยฉันแนะนำ:
Netsilik / PepperedPasswords
( github )
มันมาพร้อมกับใบอนุญาต MIT เพื่อให้คุณสามารถใช้งานได้ตามที่คุณต้องการแม้ในโครงการที่เป็นกรรมสิทธิ์
ตัวอย่างของรหัสโดยใช้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
โปรดทราบ:คุณไม่ควรต้องการสิ่งนี้อีกต่อไป! นี่เป็นเพียงเพื่อจุดประสงค์ทางประวัติศาสตร์เท่านั้น
ลองดูที่: เฟรมเวิร์กการแฮชรหัสผ่าน PHP แบบพกพา : phpassและให้แน่ใจว่าคุณใช้CRYPT_BLOWFISH
อัลกอริทึมถ้าเป็นไปได้
ตัวอย่างของรหัสโดยใช้ 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 ถูกนำไปใช้ในโครงการที่รู้จักกันดี:
- phpBB3
- WordPress 2.5+ เช่นเดียวกับ bbPress
- รีลีส Drupal 7 (โมดูลสำหรับ Drupal 5 & 6)
- คนอื่น ๆ
สิ่งที่ดีคือคุณไม่จำเป็นต้องกังวลเกี่ยวกับรายละเอียดรายละเอียดเหล่านั้นได้รับการตั้งโปรแกรมโดยคนที่มีประสบการณ์และได้รับการตรวจสอบจากคนจำนวนมากบนอินเทอร์เน็ต
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแผนการเก็บรหัสผ่านอ่านโพสต์บล็อกของJeff : คุณอาจเก็บรหัสผ่านไม่ถูกต้อง
สิ่งที่คุณทำถ้าคุณไปสำหรับ ' ฉันจะทำมันด้วยตัวเองขอขอบคุณวิธีการ' ไม่ได้ใช้MD5
หรือSHA1
ได้อีกต่อไป พวกเขามีขั้นตอนวิธีการคร่ำเครียดดี แต่ถือว่าเสียเพื่อความปลอดภัย
ปัจจุบันใช้cryptโดยที่ CRYPT_BLOWFISH เป็นแนวปฏิบัติที่ดีที่สุด
CRYPT_BLOWFISH ใน PHP เป็นการใช้งาน Bcrypt hash Bcrypt นั้นมาจากตัวเลขบล็อกของ Blowfish การใช้ประโยชน์จากการตั้งค่าคีย์ที่มีราคาแพงเพื่อลดขั้นตอนวิธี