최근에 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 문자열을 변경하는 브라우저 (업데이트하지 않고)? 내 목표는 기본적으로 공격자가 로그인 쿠키를 가져 와서 쿠키를 사용하지 못하게하는 것입니다. 이것이 내 목표를 달성하는 데 도움이 될 것인가 아니면 사용자에게 지나치게 번거로운가? 현재 쿠키 일반 텍스트에 저장하는 유일한 정보는 사용자 이름입니다.
현재 내 사이트에 HTTPS가 없으며 http 전용 만 사용하도록 설정되어 있습니다. 또한 ** 데이터베이스에 세션을 저장하지 않고 ** 보안을 유지할 수 있습니까? 그것은 또한 나의 목표입니다. 그러나 그것을 안전하게하는 것이 불가능하다면, 나는 그 비트를 스크랩 할 것입니다. 또한 사용자 에이전트를 사용할 때의 나의 요점은 공격자가 쿠키를 얻은 경우 적어도 정확한 브라우저 구성을 알고 있어야한다는 것입니다. – Earlz
또한 암호화 넌세 (nce)에 대해 "나를 기억하십시오" 만료 된 적이없는 쿠키? – Earlz
@Earlz https가 없다면 당신은 firesheep 스타일의 공격과 그 우연한 공격에 취약 할 수 있습니다. 이상적으로 당신은이 모든 것을 취할 세션 핸들러를 사용할 것이고, asp.net은 하나와 함께 제공된다는 것을 알고 있습니다. 어떤 이유로 든 내장 된 세션 핸들러를 사용할 수 없다면 파일에 저장된 키로 데이터베이스에 저장된 암호화 넌스를 암호화 할 수 있습니다. 그런 다음 데이터베이스가 잠겨 있는지 확인해야합니다. – rook