18

thể trùng lặp:
WebMatrix WebSecurity PasswordSaltsử dụng muối khi sử dụng SimpleMembershipProvider

là có một cách để có simpleMembershipProvider sử dụng muối?

khi tôi tạo ra dự án mvc4 web của tôi và thiết lập các kết nối mặc định để SQLEXPRESS, sau đó đăng ký, người dùng của tôi không có muối mật khẩu

enter image description here

Tôi muốn cho nó được bảo mật như nó có thể không có quá nhiều rắc rối.

Trả lời

25

Cột PasswordSalt không được sử dụng, nhưng việc sử dụng muối được sử dụng khi tạo mật khẩu băm được lưu trữ trong trường Mật khẩu. Bạn có thể thấy điều này nếu bạn xem mã nguồn cho SimpleMembershipProvider: http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/3a669e7112e7#src%2fWebMatrix.WebData%2fSimpleMembershipProvider.cs

Kiểm tra phương thức CreateUserAndAccount. Nó sử dụng các phương pháp Crypto.HashPassword:

/* ======================= 
    * HASHED PASSWORD FORMATS 
    * ======================= 
    * 
    * Version 0: 
    * PBKDF2 with HMAC-SHA1, 128-bit salt, 256-bit subkey, 1000 iterations. 
    * (See also: SDL crypto guidelines v5.1, Part III) 
    * Format: { 0x00, salt, subkey } 
    */ 

    public static string HashPassword(string password) 
    { 
     if (password == null) 
     { 
      throw new ArgumentNullException("password"); 
     } 

     // Produce a version 0 (see comment above) password hash. 
     byte[] salt; 
     byte[] subkey; 
     using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, PBKDF2IterCount)) 
     { 
      salt = deriveBytes.Salt; 
      subkey = deriveBytes.GetBytes(PBKDF2SubkeyLength); 
     } 

     byte[] outputBytes = new byte[1 + SaltSize + PBKDF2SubkeyLength]; 
     Buffer.BlockCopy(salt, 0, outputBytes, 1, SaltSize); 
     Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SaltSize, PBKDF2SubkeyLength); 
     return Convert.ToBase64String(outputBytes); 
    } 

Về cơ bản để giải quyết các mối quan tâm của bạn, nó sẽ an toàn như nó cần phải được mà không cần phải đi đến bất kỳ rắc rối thêm.

+0

Hmm, vậy tại sao lại có cột muối?Nếu cột muối hữu ích, thì các tình huống có thể xảy ra là gì? – jonprasetyo

+0

@jonprasetyo Tôi không biết. Dự đoán tốt nhất của tôi là nó đã được đưa ra từ các lược đồ nhà cung cấp trước đó và không giảm khi quyết định được thực hiện để tích hợp muối với băm và lưu trữ nó ở một nơi. –

2

Trích từ documentation:

Theo thiết kế, lớp SimpleMembershipProvider không thực hiện cấp đầy đủ các chức năng mà có thể trong ASP.NET thành viên nhà cung cấp, như đã định nghĩa trong lớp MembershipProvider được sử dụng bởi tất cả các nhà cung cấp thành viên ASP.NET. Một số thành viên có sẵn trong lớp vì chúng được kế thừa từ lớp cơ sở, nhưng sẽ ném một ngoại lệ nếu bạn truy cập chúng.

Nếu trang web của bạn đòi hỏi khả năng cung cấp thành viên đầy đủ, bạn có thể bỏ khởi của hệ thống thành viên trang web (mà là, không gọi WebSecurity.InitializeDatabaseConnection()) và thay vì đảm bảo rằng các thành viên tiêu chuẩn và vai trò các nhà cung cấp được kích hoạt . Trong trường hợp đó, các cuộc gọi mà bạn thực hiện đối với lớp SimpleMembershipProvider được chuyển đến nhà cung cấp tiêu chuẩn (được gọi là nhà cung cấp trước đó trong tài liệu lớp học SimpleMembershipProvider). Để biết thêm thông tin, hãy xem xem Cấu hình ứng dụng ASP.NET để sử dụng tư cách thành viên.

Trường PasswordSalt là một trong các cột đó. Nếu bạn nhìn vào mã nguồn của SimpleMembershipProvider bạn sẽ thấy rằng cột PasswordSalt chỉ đơn giản là thiết lập để string.Empty:

if (database.Execute("INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt, IsConfirmed, ConfirmationToken, CreateDate, PasswordChangedDate, PasswordFailuresSinceLastSuccess) VALUES (@0, @1, @2, @3, @4, @5, @5, @6)", new object[] { num, str, string.Empty, !requireConfirmationToken, obj3, DateTime.UtcNow, num2 }) != 1) 
{ 
    throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError); 
} 

Vì vậy, nếu bạn muốn sử dụng nó, bạn có thể viết một nhà cung cấp thành viên tùy chỉnh đó sẽ ghi đè mặc định một và tự tạo PasswordSalt. Bạn có thể ghi đè phương thức CreateAccount.

+0

Darin, nhưng cột Mật khẩu không giữ mật khẩu băm. Muối nào mà Microsoft sử dụng? Địa chỉ Mac? – ilans

Các vấn đề liên quan