ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2023.3.7.] TIL 인증/보안
    카테고리 없음 2023. 3. 7. 23:28

    Cookie

    쿠키는 서버에서 클라이언트에 영속성있는 데이터를 저장하는 방법이다. 서버는 클라이언트의 쿠키를 이용하여 데이터를 가져올 수 있다.

    쿠키를 이용하는 것은 서버에서 클라이언트에 쿠키를 전송하는것, 클라이언트에서 서버로 쿠키를 다시 전송하는 것을 말한다.

     

    서버는 클라이언트에 쿠키를 이용하여 데이터를 저장하고 특정한 데이터를 가져올 수 있지만, 아무때나 가져올 수는 없다.

    특정한 조건들이 만족되어야 다시 가져올 수 있기 때문이다.

    이는 http헤더를 사용해 쿠키옵션으로 표현할 수 있다.

     

    'Set-Cookie':[
                'cookie=yummy', 
                'Secure=Secure; Secure',
                'HttpOnly=HttpOnly; HttpOnly',
                'Path=Path; Path=/cookie',
                'Doamin=Domain; Domain=codestates.com'
            ]

    쿠키 옵션종류

    Domain

    도메인은 ww.google.com과 같은 서버에 접속할 수 있는 이름이다. 쿠키옵션에서 도메인은 포트 및 서브도메인 정보, 세부경로를 포함하지 않는다.

    요청해야할 URL이 http://www.localhost.com:3000/users/login이라 하면 여기서 Domain은 localhost.com이 된다. 

    쿠키옵션에서 도메인정보가 존재한다면 쿠키의 도메인옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있다.

     

    Path

    path는 세부경로로써 서버가 라우팅할 때 사용하는 경로이다. http://www.localhost.com:3000/users/login 여기서 path는 /users/login이 된다.

    path 옵션의 특징은 설정된 경로를 포함하는 하위경로로 요청을 하더라도 쿠키를 서버에 전송할 수 있다는 것이다. 즉 path가 /users로 설정되어있고, 요청하는 세부경로가 /users/codestates 인 경우라면 쿠키전송이 가능하다.

    하지만 /posts/codestates로 전송되는 요청은 전송불가.

     

    MaxAge or Expires

    쿠키가 유효한 기간을 정하는 옵션이다.

     

    MaxAge는 유효한 시간을 초 단위로 설정한다.

    Expires는 언제까지 유효할지 설정한다.

     

    쿠키는 위 옵션에 따라 세션쿠키와 영속성 쿠키로 나뉜다.

    세션쿠키:MaxAge 또는 Expires옵션이 없는 쿠키로, 브라우저가 실행중일때 사용할 수 있는 임시 쿠키. 브라우저를 종료하면 해당 쿠키는 삭제됨.

    영속성 쿠키: 브라우저의 종료여부와 상관없이 MaxAge 또는 Expires에 지정된 유효시간만큼 사용가능한 쿠키

     

    Secure

    사용하는 프로토콜에 따른 쿠키의 전송여부를 결정하는 옵션. 만약 Secure옵션이 true로 설정된 경우 HTTPS를 이용하는 경우에만 쿠키를 전송할 수 있다.

    단, 도메인이 localhost인 경우에는 HTTPS가 아니여도 쿠키전송이 가능하다.

     

    HttpOnly

    자바스크립트로 브라우저의 쿠키에 접근이 가능한지 여부를 결정한다. 만약 해당옵션이 true인 경우, 자바스크립트로 쿠키에 접근이 불가능하다.

    옵션을 명시하지 않는 경우에는 기본적으로 false로 지정된다. 만약 이 옵션이 false인 경우 document.cookie를 이용해 자바스크립트로 쿠키에 접근할 수 있으므로 쿠키가 탈취될 위험이 있다.

     

    SameSite

    Cross-origin 요청을 받은 경우, 요청에서 사용한 메소드(GET,POST,PUT,PATCH...)와 해당 옵션의 조합을 기준으로 서버의 쿠키전송 여부를 결정하게 된다. 

    -사용가능한 옵션들

    • Lax:Cross-Origin요청이라면 GET메소드에 대해서만 쿠키를 전송할 수 있다.
    • Strict: 단어그대로 가장 엄격한 옵션으로, Cross-Origin이 아닌 same-site인 경우에만 쿠키를 전송할 수 있다.
    • None: Cross-origin에 대해 가장 관대한 옵션으로 항상 쿠키를 보내줄 수 있다. 다만 쿠키옵션 중 Secure옵션이 필요하다.

    쿠키를 이용한 상태유지

    이러한 쿠키의 특성을 이용해 stateless한 인터넷 연결을 stateful하게 유지할 수 있다.

     

    세션

    이미 로그인을 한 상태에서 장바구니에 물품추가를 요청할 경우에, 한번더 로그인 과정을 거쳐야할까?

    아니다. 서버가 해당유저는 이미 로그인했음을 알고 있다면 유저는 매번 로그인할 필요가 없을 것이다.

    즉 인증에 따라 리소스의 접근권한이 달라진다.

     

    사용자가 인증에 성공한상태 -> 세션

    세션이 만들어지면 세션 아이디도 만들어진다.

    이때 로그인을 유지하기 위한 수단으로 쿠키를 사용한다. 쿠키는 서버에서 발급한 세션아이디를 저장한다.

Designed by Tistory.