๐Ÿ“Œ Cookie๋ž€?

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ HTTP Response Header์˜ Set-Cookie์— ๋‚ด์šฉ์„ ๋„ฃ์–ด ์ „๋‹ฌํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ๋‚ด์šฉ์„ ์ž์ฒด์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•œ๋‹ค.

1
2
3
4
5
6
<!-- Reponse Header -->
HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookies: <cookie-name>=<cookie-value>

// Page Content...
  • ์ฟ ํ‚ค๋Š” key,value๋ฅผ ์Œ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ฌธ์ž์—ด๋กœ ์ €์žฅ๋œ๋‹ค.
  • ์ฃผ๋กœ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์–ด์•ผํ•  ์ž‘์€ ์šฉ๋Ÿ‰์˜ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค.
    • Ex) n์ผ ๋™์•ˆ ๋ณด์ง€ ์•Š๊ธฐ, ๋น„๋กœ๊ทธ์ธ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ
  • ์ฟ ํ‚ค๋Š” ์ฃผ๋กœ ์ธ์ฆ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ฟ ํ‚ค๋Š” ์„ธ์…˜์ฟ ํ‚ค์™€ ํผ๋จธ๋„ŒํŠธ ์ฟ ํ‚ค๊ฐ€ ์žˆ๋‹ค.

์„ธ์…˜ ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์…ง๋‹ค์šด ๋˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ์ฟ ํ‚ค์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด Expires, Max-Age๋ฅผ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €๋Š” Session Resorting์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ์…˜์ฟ ํ‚ค๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • Expires, Max-Age ์„ค์ •์œผ๋กœ ๋งŒ๋ฃŒ ๊ธฐํ•œ์„ ์ •ํ•ด์ฃผ์ง€ ์•Š์€ ์ฟ ํ‚ค

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  ๋‹ซ๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜์—ฌ๋„ ์ฟ ํ‚ค์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜๋Š” ์ฟ ํ‚ค์ด๋‹ค. Set-Cookie์— ๋ช‡๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ Permanent Cookie๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

1
Set-Cookie: id=a3fWa; Expires=Thu, 10 Nov 2022 15:30:00 GMT;
  • ๋งŒ๋ฃŒ์‹œ๊ฐ„์€ ํด๋ผ์ด์–ธํŠธ ์‹œ๊ฐ„์„ ๋”ฐ๋ฅธ๋‹ค. (์„œ๋ฒ„์‹œ๊ฐ„๊ณผ ์ƒ์ดํ•  ์ˆ˜ ์žˆ๋‹ค.)

โœ๏ธ ์ฟ ํ‚ค ์ ‘๊ทผ

1
2
3
4
document.cookie = "yummy_cookie=choco";
document.cookie = "tasty_cookie=strawberry";
console.log(document.cookie);
// logs "yummy_cookie=choco; tasty_cookie=strawberry"

๐Ÿ”จ ์ฟ ํ‚ค ๋ณด์•ˆ

๐Ÿ™…โ€โ™‚๏ธ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” HTTP ์ฟ ํ‚ค ๋‚ด์— ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

XSS ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค ์ •๋ณด๊ฐ€ ์œ ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•˜์˜€๋‹ค.

1
Set-Cookie: id=a3fWa; Expires=Thu, 10 Nov 2022 15:30:00 GMT; HttpOnly
  • document.cookie API๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

HTTPS ์ „์†ก์„ ๋ณด์ฆํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ฟ ํ‚ค์ด๋‹ค. Secure๋กœ ์„ค์ •๋œ ์ฟ ํ‚ค๋Š” ์•ˆ์ „ํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ์—๋งŒ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.

1
Set-Cookie: id=a3fWa; Expires=Thu, 10 Nov 2022 15:30:00 GMT; Secure; HttpOnly

๐Ÿ‘ฟ Cross-site ์š”์ฒญ ์œ„์กฐ(CSRF) ๊ณต๊ฒฉ

ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์€ํ–‰ ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ ๋˜์–ด์žˆ๋‹ค. ์†ก๊ธˆ๊ณผ ๊ฐ™์€ ์€ํ–‰ ์—…๋ฌด๋ฅผ ๋ณด๊ณ  ๋กœ๊ทธ์•„์›ƒ ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ํƒญ์„ ์—ด์–ด ์–ด๋–ค ์‚ฌ์ดํŠธ๋ฅผ ์—ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ์‚ฌ์ดํŠธ์—๋Š” ํ•ด์ปค์—๊ฒŒ ์†ก๊ธˆ์„ ์š”์ฒญํ•˜๋Š” form์ด ์žˆ๊ณ  ์ด form์€ ์ž๋™์œผ๋กœ ์ œ์ถœ๋˜๋„๋ก ์„ค์ •๋˜์—ˆ๋‹ค.

form์ด ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ๊ฑฐ์ณ ์€ํ–‰ ์‚ฌ์ดํŠธ๋กœ ์ „์†ก๋  ๋•Œ ์ธ์ฆ ์ฟ ํ‚ค๋„ ํ•จ๊ป˜ ์ „์†ก๋œ๋‹ค. ์€ํ–‰์€ ์‚ฌ์šฉ์ž๋กœ ์ฐฉ๊ฐํ•˜์—ฌ ํ•ด์ปค์—๊ฒŒ ๋ˆ์„ ์†ก๊ธˆํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค.

โ‡’ ์ด๋Ÿฐ ๊ณต๊ฒฉ์„ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์š”์ฒญ ์œ„์กฐ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๐Ÿšช ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

  • XSRF ํ† ํฐ์ด๋ผ๋Š” ํŠน์ˆ˜ ํ•„๋“œ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.
  • ๋ฏผ๊ฐํ•œ ๋™์ž‘์— ํ•„์ˆ˜๋กœ ์š”๊ตฌ๋˜๋Š” ํ™•์ธ ์ ˆ์ฐจ๊ฐ€ ํ•ญ์ƒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.
  • ๋ฏผ๊ฐํ•œ ๋™์ž‘์— ์‚ฌ์šฉ๋˜๋Š” ์ฟ ํ‚ค๋Š” ์งง์€ ์ˆ˜๋ช…๋งŒ ๊ฐ–๋„๋ก ํ•œ๋‹ค.