Cách Django quản lý và bảo vệ mật khẩu
Cách Django lưu trữ mật khẩu:
Django cung cấp một hệ thống lưu trữ mật khẩu linh hoạt và sử dụng PBKDF2 theo mặc định.
Thuộc tính password
của một đối tượng User
là một chuỗi ở định dạng:
<algorithm>$<iterations>$<salt>$<hash>
Theo mặc định, Django sử dụng thuật toán PBKDF2 với hàm băm SHA256, một cơ chế kéo dài mật khẩu được NIST khuyến nghị vì nó khá an toàn, đòi hỏi một lượng lớn thời gian tính toán để phá vỡ. Tuy nhiên, tùy thuộc vào yêu cầu của bạn, bạn có thể chọn một thuật toán khác hoặc thậm chí sử dụng một thuật toán tùy chỉnh để phù hợp với tình huống bảo mật cụ thể của bạn.
Bạn có thể tham khảo để lựa chọn thuật toán trong Django bằng PASSWORD_HASHERS
- đây là danh sách các thuật toán băm mà Django hỗ trợ.
Để lưu trữ mật khẩu, Django sẽ sử dụng hàm băm đầu tiên PASSWORD_HASHERS
và nếu bạn muốn lưu trữ mật khẩu mới bằng một thuật toán khác thì đưa thuật toán của bạn vào trước PASSWORD_HASHERS
. Để xác minh mật khẩu, Django sẽ tìm hàm băm trong danh sách khớp với tên thuật toán trong mật khẩu được lưu trữ. Đối với Django, nó sẽ sử dụng PBKDF2 để lưu trữ tất cả mật khẩu nhưng sẽ hỗ trợ kiểm tra mật khẩu được lưu trữ bằng PBKDF2SHA1, argon2 và bcrypt.
Ta có giá trị mặc định cho PASSWORD_HASHERS
là:
PASSWORD_HASHERS [
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.ScryptPasswordHasher',
]
Sử dụng Argon2 trong Django:
Trong một cuộc thử nghiệm băm mật khẩu năm 2015 thì Argon2 xếp vị trí thứ nhất, nó được thiết kế để tăng độ khó tính toán trên phần cứng, có thể tùy chỉnh hơn so với tính toán trên CPU thông thường. Argon2 có các thuộc tính sau có thể được tùy chỉnh:
Argon2 không phải là mặc định sử dụng cho Django vì nó có yêu cầu thư viện của bên thứ ba. Tuy nhiên, bạn vẫn nên sử dụng Argon2 thay vì các thuật toán khác được hỗ trợ bởi Django. Để sử dụng Argon2 làm thuật toán lưu trữ mặc định của bạn, hãy làm như sau:
1.Cài đặt thư viện argon2-cffi. Bạn có thể cài đặt bằng cách chạy lệnh:
python -m pip install django[argon2]
python -m pip install argon2-cffi
2.Sửa đổi PASSWORD_HASHERS
thành Argon2PasswordHasher
:
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.ScryptPasswordHasher',
]
Sử dụng bcrypt trong Django:
Bcrypt là một thuật toán lưu trữ mật khẩu phổ biến được thiết kế đặc biệt để lưu trữ mật khẩu lâu dài. Nó không phải là thuật toán mặc định có trong Django vì nó yêu cầu sử dụng thư viện của bên thứ ba,Django chỉ hỗ trợ bcrypt.
Để sử dụng Bcrypt làm thuật toán lưu trữ trong Djangio, bạn cần:
1.Cài đặt thư viện bcrypt bằng lệnh python -m pip install bcrypt
.
2.Sửa đổi PASSWORD_HASHERS
thành BCryptSHA256PasswordHasher
, sau đó bạn sẽ đặt:
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.ScryptPasswordHasher',
]
Nguồn: django tutorial