2011-03-05 10 views
3

최근에 Jeff의 articles about XSS 중 하나를 읽었으며 집에서 인증 한 인증 시스템에서 로그인 쿠키를 더 잘 보호하는 방법에 대해 생각하게되었습니다.안전한 로그인 쿠키 만들기

가 기본적으로 내가 지금 할 것은 이것이다 (참고, 모든 구성 및 현재 true로 설정) :

 protected static string ComputeLoginHash(string passwordhash){ 
     StringBuilder sb=new StringBuilder(); 
     sb.Append(passwordhash); 
     if(CookieUseIP){ 
      sb.Append(HttpContext.Current.Request.UserHostAddress); 
     } 
     if(CookieUseBase){ 
      sb.Append(HttpContext.Current.Request.MapPath("/")); 
     } 
     if(CookieUseBrowserInfo){ 
      sb.Append(HttpContext.Current.Request.UserAgent); 
     } 
     sb.Append(SiteName); 
     return ComputeHash(sb.ToString()); 
    } 

(즉 passwordhash이 비밀번호, 독특한 소금, 및 사용자 이름에서 만들어 주).

내가 좋아하는 것들 중 하나는 UserAgent 문자열을 사용하는 것입니다. 이 일에 해가 되니? 또는 정상 작동 상태에서 UserAgent 문자열을 변경하는 브라우저 (업데이트하지 않고)? 내 목표는 기본적으로 공격자가 로그인 쿠키를 가져 와서 쿠키를 사용하지 못하게하는 것입니다. 이것이 내 목표를 달성하는 데 도움이 될 것인가 아니면 사용자에게 지나치게 번거로운가? 현재 쿠키 일반 텍스트에 저장하는 유일한 정보는 사용자 이름입니다.

답변

6

먼저 세션 처리기를 작성하면 안됩니다. 당신은 바퀴를 재발 명하고 덜 안전 할 것입니다.

ComputeLoginHash()이 쿠키 값을 생성하는 경우 큰 문제이 손에 있습니다. 공격자는 데이터베이스에서 사용자 이름/암호 해시를 가져온 다음 해시 함수에 전달하여 쿠키 값을 작성할 수 있습니다. 이렇게하면 침입자가 암호를 크래킹 할 필요없이 로그인 할 수 있습니다. 효과적으로 해싱 암호로 제공되는 보호 기능을 완전히 제거하고 있습니다.

쿠키 값은 항상 cryptographic nonce이어야하며이 값은 만료되어야합니다 (하루 미만이 좋음). 추가 보안을 위해 xss를 방해하는 데 도움이되는 http-only cookies을 사용하십시오. 또한 sts-header을 https를 시행하도록 설정하고 차례로 OWASP A9를 처리하십시오. 또한 session riding을 잊지 마세요. 또한 공격자가 제어하는 ​​변수이기 때문에 사용자 에이전트를 확인하는 데 절대적으로 의미가 없습니다.

+0

현재 내 사이트에 HTTPS가 없으며 http 전용 만 사용하도록 설정되어 있습니다. 또한 ** 데이터베이스에 세션을 저장하지 않고 ** 보안을 유지할 수 있습니까? 그것은 또한 나의 목표입니다. 그러나 그것을 안전하게하는 것이 불가능하다면, 나는 그 비트를 스크랩 할 것입니다. 또한 사용자 에이전트를 사용할 때의 나의 요점은 공격자가 쿠키를 얻은 경우 적어도 정확한 브라우저 구성을 알고 있어야한다는 것입니다. – Earlz

+0

또한 암호화 넌세 (nce)에 대해 "나를 기억하십시오" 만료 된 적이없는 쿠키? – Earlz

+1

@Earlz https가 없다면 당신은 firesheep 스타일의 공격과 그 우연한 공격에 취약 할 수 있습니다. 이상적으로 당신은이 모든 것을 취할 세션 핸들러를 사용할 것이고, asp.net은 하나와 함께 제공된다는 것을 알고 있습니다. 어떤 이유로 든 내장 된 세션 핸들러를 사용할 수 없다면 파일에 저장된 키로 데이터베이스에 저장된 암호화 넌스를 암호화 할 수 있습니다. 그런 다음 데이터베이스가 잠겨 있는지 확인해야합니다. – rook

관련 문제