programing

쿠키에 암호를 저장하는 것이 안전합니까?

muds 2023. 7. 10. 23:00
반응형

쿠키에 암호를 저장하는 것이 안전합니까?

웹 응용 프로그램의 홈 페이지에 RememberMe 확인란이 있습니다.사용자가 확인하면 이메일 아이디와 비밀번호를 쿠키에 저장하겠습니다.내 코드는 다음과 같습니다.

if (this.ChkRememberme != null && this.ChkRememberme.Checked == true)
   {
     HttpCookie cookie = new HttpCookie(TxtUserName.Text, TxtPassword.Text);
     cookie.Expires.AddYears(1);
     Response.Cookies.Add(cookie);
   }

제가 알고 싶은 것은:

  • 쿠키에 암호를 저장하는 것이 안전합니까?
  • 같은 일을 하는 적절한 방법은 무엇입니까?
  • 쿠키 시간을 설정할 때 가장 좋은 방법은 무엇입니까?

암호는 일반 텍스트로 사용할 수 있기 때문에 쿠키에 저장하는 것이 안전하지 않습니다.

쿠키에 대한 몇 가지 답을 찾기에 좋은 장소는 쿠키 센트럴입니다.구성원 자격의 경우 일반적으로 사용자 이름과 암호를 제공할 때 웹 사이트에서 발급되는 'token'이라는 긴 문자열이 있는 쿠키를 사용합니다. 문서에서 확인할 수 있는 프로세스에 대한 자세한 내용은 다음과 같습니다.ASP.NET에서 양식 인증을 사용할 때 다음과 같이 인증 쿠키를 설정할 수 있습니다.

FormsAuthentication.SetAuthCookie(userName, isPersistanceCookie);

두 번째 매개변수는 "나를 기억" 기능에 사용됩니다. 이 매개변수가 참이면 사이트를 떠난 후에도 지속되는 영구 쿠키가 생성됩니다.다음과 같이 쿠키를 프로그래밍 방식으로 조작할 수도 있습니다.

HttpCookie authCookie =
  HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

안돼요! 쿠키에 암호를 저장하지 마세요!

ASP.NET에서 사용

FormsAuthentication.SetAuthCookie(username, true);

두 번째 인수의 값은 쿠키가 지속적인지 여부(Remember me 확인란의 값)를 결정합니다.

아니요, 원격으로 보호할 수 없습니다.쿠키가 일반 텍스트로 저장되지 않는다는 보장은 없습니다. 실제로 대부분의 구현에서는 쿠키가 일반 텍스트로 저장됩니다.

쿠키를 가로채는 모든 사용자가 응용프로그램에 액세스할 수 있기 때문에 "Remember me"는 본질적으로 안전하지 않습니다.하지만 사용자의 비밀번호를 노출하는 것은 보안상의 문제에서 한 걸음 더 내려갑니다. :-) 그리고 만약 그들이 알게 된다면, 아마도 사용자를 정말 화나게 할 것입니다.

서버의 테이블을 제외하고 사용자 계정과 연결되지 않은 토큰과 사용자 계정 이름을 결합한 암호화된 쿠키 문자열을 사용합니다.사용자가 사이트로 돌아오면 쿠키의 암호를 해독하고 해당 토큰이 실제로 해당 계정과 연결되어 있는지 확인합니다.토큰(및 쿠키)은 모든 자동 로그인을 변경하고 해당 자동 로그인에 사용된 토큰을 무효화합니다.토큰과 계정 사이에는 다대일 관계가 있으므로 여러 위치에서 자동 로그인할 수 있습니다.원한다면 제한할 수 있습니다.)토큰은 X일 이내에 사용되지 않으면 시간이 초과됩니다.(이 작업은 쿠키의 기간을 제한함으로써만 수행되는 것이 아니라 서버 측에서도 수행됩니다.)쿠키를 해독하려는 사람(암호 해독에 성공함)이나 도난당한 쿠키를 사용하려는 사람(암호 해독이 필요하지 않음)의 삶을 조금 더 어렵게 만들기 위해 몇 가지 다른 것들이 있지만, 과도하게 죽이는 것은 의미가 없습니다(다시 말하지만, "나를 기억해"는 본질적으로 불안정합니다).

저는 강력한 보안이 실제로 필요하지 않은(분명히) 많은 동적 IP 클라이언트가 있는 사이트에서 사용하기 때문에 IP로 제한하려고 하지 않습니다.하지만 IP로 제한한다고 해서 보안이 되는 것이 아니라 공격 대상이 조금 줄어들 뿐입니다.

쿠키에 사용자 이름이 있는 이유가 궁금할 수 있습니다.직접적인 "기억해줘"를 위해 암호화된 경우에도 암호화된 경우(결국 사용자 이름+암호 시스템에서 인증 쌍의 절반임) 암호를 사용하는 것은 권장하지 않습니다.저는 우리가 이 질문에 대해 어떻게 했는지 스스로에게 상기시킬 때 우리의 쿠키에서 그것을 발견했을 때 약간 놀랐습니다; 하지만 저는 그것이 왜 거기에 있고 "나를 기억하라"와 관련이 없는 이유들(반드시 설득력 있는 이유가 아닌 이유들)을 설명하는 댓글을 보았습니다.

마지막으로, "Remember me"가 본질적으로 안전하지 않다는 사실은 사이트 로그가 매우 중요한 이유 중 하나이며 중요한 계정 정보의 변경을 허용하는 과정에서 암호 확인을 요구해야 하는 이유입니다(쿠키를 도용한 다른 사용자가 계정의 소유권을 얻는 것을 어렵게 함).

쿠키 값을 변경하고 서버로 다시 보내기가 매우 쉽기 때문에 이 작업은 절대로 수행해서는 안 됩니다.쿠키에 "사용자가 '나이비스트'로 로그인됨"을 저장하는 것조차 잘못된 것입니다. "사용자가 '판디야 첸두르'로 로그인됨"으로 변경할 수 있기 때문입니다.

쿠키에서 수행할 수 있는 작업은 변경되더라도 서버에 적합하지 않은 정보를 클라이언트에 제공하는 것입니다.예를 들어 - 즐겨찾기 색, 첫 페이지 레이아웃 등입니다.

다른 세션에서 유효한 세션 ID를 알지 못하는 경우 다른 세션에서 값을 변경할 경우 쿠키에 저장된 세션 ID를 제공할 수 있습니다.

Microsoft의 MSDN에서 쿠키 사용에 대해 언급한 내용:

쿠키의 보안 문제는 클라이언트에서 데이터를 가져오는 문제와 비슷합니다.응용 프로그램에서 쿠키는 사용자 입력의 또 다른 형태이므로 검사 및 스푸핑의 대상이 됩니다.쿠키는 사용자의 컴퓨터에서 사용할 수 있으므로 사용자는 쿠키에 저장된 데이터를 최소한 볼 수 있습니다.사용자는 브라우저에서 쿠키를 보내기 전에 쿠키를 변경할 수도 있습니다.

사용자 이름, 암호, 신용 카드 번호 등 중요한 데이터를 쿠키에 저장해서는 안 됩니다.사용자나 쿠키를 훔칠 수 있는 사람의 손에 있으면 안 되는 것을 쿠키에 넣지 마십시오.

마찬가지로 쿠키에서 얻은 정보를 의심해야 합니다.데이터가 작성할 때와 동일하다고 가정하지 마십시오. 쿠키 값 작업 시 사용자가 웹 페이지에 입력한 데이터와 동일한 보호 조치를 사용합니다.이 항목의 앞부분에 있는 예제에서는 페이지에 값을 표시하기 전에 사용자로부터 얻은 정보를 표시하기 전에 쿠키의 내용을 HTML로 인코딩하는 방법을 보여주었습니다.

쿠키는 일반 텍스트로 브라우저와 서버 간에 전송되며, 웹 트래픽을 가로챌 수 있는 사용자는 누구나 쿠키를 읽을 수 있습니다.연결에서 SSL(Secure Sockets Layer)을 사용하는 경우에만 쿠키를 전송하는 쿠키 속성을 설정할 수 있습니다.SSL은 쿠키가 사용자의 컴퓨터에 있는 동안 쿠키가 읽히거나 조작되는 것을 방지하지 않지만 쿠키가 암호화되어 있기 때문에 쿠키가 전송 중에 읽히는 것을 방지합니다.자세한 내용은 웹 응용프로그램에 대한 기본 보안 관행을 참조하십시오.

  • 보안 정보를 전송할 때 사용해야 하는 SSL을 사용하면 타사가 웹 트래픽을 수신하지 않아도 됩니다.쿠키에 사용자 자격 증명을 저장하는 경우에도 동일한 문제가 발생합니다. 쿠키에 사용자 자격 증명을 저장할 때 사용자 이름과 암호를 서버로 전송하면 서버가 해시하고 해당 사용자에 대해 가지고 있는 해시된 암호와 비교하기 때문입니다.

  • 다른 도메인은 교차 출처로 인해 쿠키를 읽을 수 없으므로 문제가 되지 않습니다.

  • 따라서 이를 "보안 구멍"이라고 부르는 유일한 방법은 누군가가 자신의 컴퓨터에 물리적으로 액세스할 수 있는 경우입니다.그런 일이 일어난다면 그들은 어쨌든 그 사람으로부터 원하는 정보를 얻을 가능성이 높습니다.크롬 오토가 로그인 양식을 작성할 때 어떻게 설명합니까, 안전합니까?나는 그들이 그것을 일반 텍스트로 저장하고 있지 않다고 확신하지만 그것은 중요하지 않습니다.크롬 자동 입력 페이지로 이동하면 양식에서 암호를 복사하여 해당 사용자의 암호를 확인할 수 있습니다.

  • 얼마나 "보안"이 필요한지에 따라 결정됩니다.저는 사용자 정보를 토큰으로 암호화하는 것이 서비스 통화를 인증하는 가장 좋은 방법이며 유연성을 제공한다는 것에 동의합니다.쿠키에 로그인 자격 증명을 저장하는 데 문제가 있다고 생각하지 않습니다.

암호는 일반 텍스트로 사용할 수 있기 때문에 쿠키에 암호를 저장하는 것은 안전하지 않습니다. 그러나 기본 조건이나 사용자 요구 사항이 있는 경우 문자열을 암호화하여 암호화할 수 있습니다.충분히 안전하게 만들 수 있습니다.

하지만 권장되지는 않습니다.

Windows Identity에서 얻은 사용자 이름과 암호화된 인증 문자열로 토큰을 만들어야 한다고 생각합니다.쿠키에 암호를 저장할 필요가 없습니다.사용자 이름과 인증된 문자열을 저장하는 애플리케이션이 있습니다.

그나저나, 스토어 암호는 클라이언트와 서버 측 모두에서 안전하지 않습니다.

당신이 그렇게 하실 필요는 없어요.

브라니슬라프가 한 말은...

쿠키에 중요한 데이터를 넣지 않을 뿐만 아니라 web.config에 다음과 같은 정보를 저장하여 보호해야 합니다.

<httpCookies httpOnlyCookies="true" />

자세한 내용은 다음을 참조하십시오.ASP.NET에서 httpOnlyCookies를 정확히 어떻게 구성합니까?

그것은 전혀 안전하지 않습니다.쿠키는 클라이언트 컴퓨터에 저장되며 이는 조작될 수 있습니다.

언급URL : https://stackoverflow.com/questions/2100356/is-it-secure-to-store-passwords-in-cookies

반응형