2009-02-13 33 views
5

Tôi đang sử dụng nhà cung cấp dịch vụ thành viên .NET tiêu chuẩn và tôi nghĩ rằng liệu có ai đó có thể chiếu sáng trên đó không.Tại sao ValidateUser không trả lại nhiều hơn?

Gọi ValidateUser trả lại đúng hoặc sai. Bây giờ vì phương thức chấp nhận tên người dùng và mật khẩu, người ta sẽ cho rằng kết quả trả về sẽ phản ánh tên người dùng hoặc mật khẩu không hợp lệ. Tuy nhiên, nếu chúng ta nghiên cứu kỹ hơn, chúng tôi thấy nó cũng đang kiểm tra IsLockedOut và IsApproved.

public override bool ValidateUser (string username, string password) 
{ 
    MembershipUser user = GetUser (username, false); 
    /* if the user is locked out, return false immediately */ 
    if (user.IsLockedOut) 
     return false; 
    /* if the user is not yet approved, return false */ 
    if (!user.IsApproved) 
     return false; 
    ...... 

Trong đơn đăng ký của mình, tôi muốn sử dụng IsApproved cho phương tiện của riêng mình. Đơn giản chỉ cần cán nhà cung cấp của riêng tôi sẽ không hoạt động vì tôi vẫn còn bị ràng buộc với một kết quả bool. Việc tạo người dùng cung cấp cho chúng tôi tất cả thông tin chúng tôi cần, vậy tại sao không ValidateUser? Tui bỏ lỡ điều gì vậy?

Trả lời

9

Tôi hy vọng rằng những gì bạn thấy là một quyết định bảo mật - bằng cách hạn chế thông tin được trả lại, họ không cung cấp thông tin cho các bên độc hại.

Hãy tưởng tượng bạn là Cyril Cracker, đang cố đột nhập vào một trang web.

Kịch bản # 1: Bạn thử nhập tên người dùng "Quản trị" bằng mật khẩu "Mật khẩu" và hệ thống sẽ thông báo cho bạn khi không truy cập. Thông tin duy nhất bạn có là Quản trị viên/Mật khẩu không phải là kết hợp hợp lệ.

Kịch bản # 2: Bạn thử nhập tên người dùng "Quản trị" bằng mật khẩu "Mật khẩu" và hệ thống cho bạn biết rằng không có người dùng nào tên đó được biết. Bạn có thể tiếp tục thử các tên người dùng khác nhau cho đến khi bạn tìm thấy một tên người dùng mà được biết là.

Trường hợp # 3: Bạn thử nhập tên người dùng "Quản trị" bằng mật khẩu "Mật khẩu" và hệ thống cho bạn biết rằng không có mật khẩu không hợp lệ. Đột nhiên, bạn biết rằng "Quản trị" là người dùng hợp lệ. Bạn đã học được một cái gì đó hữu ích, và tất cả những gì bạn cần để đoán là mật khẩu.

Kịch bản # 4: Bạn thử nhập tên người dùng "Quản trị" bằng mật khẩu "Mật khẩu" và hệ thống cho bạn biết rằng tài khoản bị chặn. Bây giờ, bạn biết tên người dùng và mật khẩu hợp lệ và tài khoản bị chặn. Bạn có thể quay lại sau và thử lại.

Hệ thống làm đổ hạt trên những gì hợp lệ và không được gọi là hệ thống trò chuyện và chúng được coi là không an toàn vì lý do chính đáng.

Hy vọng điều này hữu ích.

+0

Làm cho cảm giác hoàn hảo! – mickyjtwin

+0

Đối với kịch bản số 4, nếu tôi là người dùng bonafide, không có thêm thông tin, tôi sẽ xé tóc ra ... kết hợp mật khẩu tên người dùng là chính xác, nhưng tôi không thể đăng nhập! – escist

+1

@escist Yep, và trong thế giới thực khi tài khoản của tôi bị khóa và tôi không thể vào được, đó chính xác là phản ứng của tôi. Điều quan trọng là phải có một con đường thay thế cho phép một người sử dụng để tìm hiểu những gì đang xảy ra mà không đưa thông tin cho "Cyril Cracker". Một số trang web dựa vào một URL sử dụng một lần được gửi qua email cho người dùng, nhưng cũng có các cách tiếp cận khác. – Bevan

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