Tôi có một trang web rất nhỏ và gần đây tôi đã cố gắng để làm cho nó an toàn hơn, tôi sử dụng để lưu trữ mật khẩu của tôi trong văn bản thuần túy.Làm cho trang web của tôi an toàn hơn, Tôi có sử dụng password_hash đúng không?
Tôi nghĩ Im làm điều đó đúng, nhưng như là một "sở thích" lập trình Tôi muốn chắc chắn vì vậy tôi hỏi bạn, các chuyên gia
Khi người dùng đăng ký tôi làm: password_hash($their_password, PASSWORD_DEFAULT)
và lưu trữ trong cột 'mật khẩu' trong bảng người dùng. Tôi sử dụng PASSWORD_DEFAULT
vì điều đó có vẻ tốt nhất theo php.net. .
Lưu ý rằng hằng số này được thiết kế để thay đổi theo thời gian khi các thuật toán mới và mạnh mẽ hơn được thêm vào PHP"
Âm thanh tốt
Và phần Login (rất đơn giản):
if (count($_POST) > 0) {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$query = $db->prepare("SELECT password FROM users WHERE username = ?");
$query->execute(array($username));
$row = $query->fetch();
if (password_verify($password, $row['password'])) {
echo "Correct password";
// create session...
} else {
// wrong password
}
Có lẽ tôi nên kiểm tra xem tên người dùng có tồn tại trước hay không nhưng bạn nghĩ gì?
Có vẻ ổn. Đó là cách sử dụng password_hash \ verify. Quan trọng cần biết rằng thuật toán bạn đang sử dụng được gọi là bcrypt được khuyến nghị. Tôi khuyên bạn nên sử dụng cột mysql là BINARY (60) để tiết kiệm bộ nhớ, –
Có vẻ tốt với tôi. Tôi cá nhân đặt phần truy vấn trong một phần khác nhau của mã của bạn mặc dù (bọc nó trong một lớp có lẽ). – Bono
Tôi đang bỏ phiếu để đóng câu hỏi này thành chủ đề vì nó phù hợp cho http://codereview.stackexchange.com, không quá nhiều SO. – deceze