[인증/보안] 기초 Chapter - Cookie
HTTP요청은 무상태성을 가지고 있는데 어떻게 정보가 유지되고 있을까? 바로 cookie 덕분이다.
Cookie
웹사이트에 들어갔을 때, 서버가 일방적으로 클라이언트에 전달하는 작은 데이터
- 서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단.
- 해당 도메인에 대해 쿠키가 존재한다면, 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달.
- cookie는 삭제하지 않으면 사라지지 않는다.
그렇다면 서버는 cookie를 이용하여 어떤 데이터를 저장하려고 할까?
⇒ cookie는 삭제하지 않으면 사라지지 않는다는 특성이 있기 때문에 장기간 저장해야하는 옵션을 클라이언트에 저장하기에 적합하다. 쇼핑몰 장바구니 정보, 30일동안 로그인 상태유지뿐만 아니라, 로그인 로그아웃을 위해 인증 정보를 쿠키에 저장하기도 한다.
위와 같은 경우로 많이 쓰이지만, cookie는 쉽게 찾아볼 수 있기 때문에 보안에 취약하다는 단점이 있다. 하여 인증정보와 같은 경우는 Hashing처리가 되어 있다.
Cookie 전달방법
- 서버가 응답 헤더의 set-Cookie라는 프로퍼디에 쿠키의 이름, 값, 경로등의 옵션을 저장한다.
- 쿠키가 담긴 응답을 받을 클라이언트는 응답 헤더에 존재하는 set-Cookie를 확인하게 된다.
- 다음에 매 요청시 마다 쿠키에 존재하는 이름과 값을 서버에 전송하게 된다.
- 이러한 식으로 클라이언트가 쿠키를 저장하면 이후로는 해당 웹 사이트를 이용할 때, 매 요청에 자동으로 쿠키가 같이 전송된다.
- 하여 쿠키 내용을 바탕으로 서버는 클라이언트에 저장된 쿠키내용을 바탕으로 로그인을 유지한다던지, 장바구니가 담겨있다던지의 편의성을 제공하게 된다.
Cookie Options
1. Domain
도메인이라는 것은 여러분들이 흔하게 보실 수 있는 www.google.com
과 같은 서버에 접속할 수 있는 이름입니다.
쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보, 세부 경로를 포함하지 않습니다.
여기서 서브 도메인이란 www
같은 도메인 앞에 추가로 작성되는 부분을 말합니다.
따라서 요청해야 할 URL이 http://www.localhost.com:3000/users/login
이라 하면
여기에서 Domain은 localhost.com
이 됩니다.
만약 쿠키 옵션에서 도메인 정보가 존재한다면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있습니다.
2. Path
세부 경로는 서버가 라우팅할 때 사용하는 경로입니다.
만약 요청해야 하는 URL이 http://www.localhost.com:3000/users/login
인 경우라면 여기에서 Path, 세부 경로는
/users/login
이 됩니다.
명시하지 않으면 기본으로 /
으로 설정되어 있습니다.
Path 옵션의 특징은 설정된 path를 전부 만족하는 경우 요청하는 Path가 추가로 더 존재하더라도 쿠키를 서버에 전송할 수 있습니다.
즉 Path가 /users
로 설정되어 있고, 요청하는 세부 경로가 /users/login
인 경우라면 쿠키 전송이 가능합니다.
하지만 /user/login
으로 전송되는 요청은 Path 옵션을 만족하지 못하기 때문에 서버로 쿠키를 전송할 수 없습니다.
3. MaxAge or Expires
쿠키가 유효한 기간을 정하는 옵션입니다.
MaxAge는 앞으로 몇 초 동안 쿠키가 유효한지 설정하는 옵션입니다.
Expires 은 MaxAge와 비슷합니다. 다만 언제까지 유효한지 Date
를 지정합니다.
이때 클라이언트의 시간을 기준으로 합니다.
이후 지정된 시간, 날짜를 초과하게 되면 쿠키는 자동으로 파괴됩니다.
하지만 두 옵션이 모두 지정되지 않는 경우에는 브라우저의 탭을 닫아야만 쿠키가 제거될 수 있습니다.
기본적으로 쿠키는 브라우져에 저장이 된다. 하여 브라우져에서 확인이 가능하기에 해커에 의해 탈취가 가능하다는 것이다. 이러한 사고를 방지하기위해 MaxAge or Expires 를 설정하여 쿠키의 기간을 두고, 기간동안 사용하지 않으면 자동으로 소멸하도록 하는 것이다.
4. Secure
쿠키를 전송해야 할 때 사용하는 프로토콜에 따른 쿠키 전송 여부를 결정합니다.
만약 해당 옵션이 true
로 설정된 경우, 'HTTPS' 프로토콜을 이용하여 통신하는 경우에만 쿠키를 전송할 수 있습니다.
5. HttpOnly
자바스크립트에서 브라우저의 쿠키에 접근 여부를 결정합니다.
만약 해당 옵션이 true
로 설정된 경우, 자바스크립트에서는 쿠키에 접근이 불가합니다.
명시되지 않는 경우 기본으로 false
로 지정되어 있습니다.
만약 이 옵션이 false
인 경우 자바스크립트에서 쿠키에 접근이 가능하므로 'XSS' 공격에 취약합니다.
쿠키는 경우에 따라
<script>alert(document.cookie)</script>
그렇기 때문에 HttpOnly옵션을 주게 된다면
6. SameSite
Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정하게 됩니다.
사용 가능한 옵션은 다음과 같습니다.
- Lax :Cross-Origin 요청이면 'GET' 메소드에 대해서만 쿠키를 전송할 수 있습니다.
- Strict : Cross-Origin이 아닌
same-site
인 경우에만 쿠키를 전송 할 수 있습니다. - None: 항상 쿠키를 보내줄 수 있습니다. 다만 쿠키 옵션 중
Secure
옵션이 필요합니다. 이때 'same-site'는 요청을 보낸 Origin과 서버의 도메인이 같은 경우를 말합니다.
이러한 옵션들을 지정한 다음 서버에서 클라이언트로 쿠키를 처음 전송하게 된다면 헤더에 Set-Cookie
라는 프로퍼티에 쿠키를 담아 쿠키를 전송하게 됩니다.
이후 클라이언트 혹은 서버에서 쿠키를 전송해야 한다면 클라이언트는 헤더에 Cookie
라는 프로퍼티에 쿠키를 담아 서버에 쿠키를 전송하게 됩니다.
Author And Source
이 문제에 관하여([인증/보안] 기초 Chapter - Cookie), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ahsy92/인증보안-기초-Chapter-Cookie저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)