2009-02-13 4 views
5

표준 .NET 멤버 자격 공급자를 사용 중이므로 누군가가 빛을 발할 수 있는지 알 것입니다.왜 ValidateUser는 더 이상 반환하지 않습니까?

ValidateUser를 호출하면 true 또는 false가 반환됩니다. 이제 메소드가 사용자 이름과 암호를 허용하기 때문에 반환 결과에 잘못된 사용자 이름이나 암호가 반영 될 수 있습니다. 그러나 더 자세히 조사해 보면 IsLockedOut 및 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; 
    ...... 

내 응용 프로그램에서, 나는 내 자신의 수단으로 IsApproved를 사용하고 싶습니다. 내가 여전히 부울 결과에 구속되기 때문에 내 자신의 공급자를 롤링하기 만하면 작동하지 않습니다. 사용자를 생성하면 우리에게 필요한 모든 정보가 제공되므로 ValidateUser를 사용하지 않는 이유는 무엇입니까? 내가 놓친 게 있니?

답변

9

나는보고있는 정보가 보안상의 결정이라고 생각합니다. 반환 된 정보를 제한함으로써 악의적 인 당사자에게 정보를 제공하지 않습니다.

시리 크래커 (Cyril Cracker)라고 상상해보십시오.

시나리오 # 1 : 암호 "Password"로 사용자 이름 "Admin"을 입력하면 시스템에서 사용자에게 no-go를 알려줍니다. 귀하가 가지고있는 유일한 정보는 Admin/Password가 유효한 조합이 아니라는 것입니다.

시나리오 # 2 : 암호 "암호"로 사용자 이름 "Admin"을 입력하면 해당 이름의 사용자를 알 수 없다는 메시지가 나타납니다. 인 것을 알기 전까지는 계속 다른 사용자 이름을 시도 할 수 있습니다.

시나리오 3 : 비밀번호 "비밀번호"로 사용자 이름 "Admin"을 입력하면 비밀번호가 유효하지 않다는 메시지가 나타납니다. 갑자기 "Admin"이 유효한 사용자라는 것을 알고 있습니다. 당신은 유용한 것을 배웠고 추측을 유지하기 위해 필요한 것은 암호입니다.

시나리오 4 : 암호 "암호"로 사용자 이름 "Admin"을 입력하면 계정이 차단되었다는 메시지가 나타납니다. 이제 유효한 사용자 이름과 암호를 알았고 계정이 차단되었습니다. 나중에 다시 와서 다시 시도 할 수 있습니다.

무엇이 유효하고 무엇이 아닌가에 콩을 쏟아내는 시스템은 채팅 시스템으로 알려져 있으며, 균열이 쉽기 때문에 안전하지 않은 것으로 간주됩니다.

희망이 있으면 도움이됩니다.

+0

완벽한 의미가 있습니다. – mickyjtwin

+0

시나리오 4의 경우 추가 정보가없는 보나 피이드 사용자 인 경우 머리카락을 찢어 버릴 수 있습니다 ... 사용자 이름 비밀번호 조합이 맞지만 로그인 할 수 없습니다! – escist

+1

@escist 그래, 현실 세계에서 나의 계정이 잠겨서 들어올 수 없을 때, 그것은 나의 반응이다. 열쇠는 사용자가 "Cyril Cracker"에게 정보를 제공하지 않고 진행 상황을 알 수있는 대체 경로를 갖는 것입니다. 일부 사이트는 사용자에게 이메일로 발송되는 일회용 URL에 의존하지만 다른 접근 방식도 있습니다. – Bevan

관련 문제