Cách Django quản lý và bảo vệ mật khẩu

Quản lý mật khẩu là một phần thiết yếu vì vậy Django cung cấp một bộ công cụ an toàn và linh hoạt để quản lý mật khẩu người dùng. Bài viết này sẽ nói về cách Django lưu trữ mật khẩu và cấu hình hàm băm cùng với một số tiện ích hoạt động với 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 passwordcủa một đối tượng Userlà một chuỗi ở định dạng:

 <algorithm>$<iterations>$<salt>$<hash>
Đó là các thành phần được sử dụng để lưu trữ mật khẩu của người dùng, được phân tách bằng ký tự đô la và bao gồm: thuật toán băm, số lần lặp lại thuật toán (hệ số công việc), giá trị ngẫu nhiên "salt" và kết quả băm mật khẩu. Thuật toán này là một trong số các thuật toán băm hoặc lưu trữ mật khẩu một chiều mà Django có thể sử dụng. Các lần lặp lại biểu thị số lần thuật toán được chạy trên hàm băm. Salt là sinh số ngẫu nhiên được sử dụng và hàm băm là kết quả của hàm một chiều.
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:

  • time_cost kiểm soát số lần lặp lại trong hàm băm,
  • memory_cost kiểm soát kích thước của bộ nhớ phải được sử dụng trong quá trình tính toán băm.
  • parallelism kiểm soát số lượng CPU tính toán băm có thể được song song trên.
  • 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]
    
    Hoặc
        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

    Công nghệ được nhắc đến trong bài viết này

    Tên Công NghệPhiên BảnPhát Hành
    Django---
    4 phút đọc·1,197 lượt xem·2 years ago