[๋„คํŠธ์›Œํฌ] Cookie

HTTP ์ฟ ํ‚ค(์›น ์ฟ ํ‚ค, ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค)๋Š” ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ HTTP์š”์ฒญ์„ ์ˆ˜์‹ ํ•  ๋•Œ, ์„œ๋ฒ„๋Š” ์‘๋‹ต๊ณผ ํ•จ๊ป˜ Set-Cookieํ—ค๋”๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , HTTP ์š”์ฒญ์‹œ ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

HTTP๋Š” Stateless์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„œ๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง‘๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์š”์ฒญ๊ณผ ๋งํฌ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์ฟ ํ‚ค๋ฅผ ์จ์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image

์ด๋ ‡๊ฒŒ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋†“๊ณ  ๋ชจ๋“  ์š”์ฒญ์— ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค๋Š” ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

์ฟ ํ‚ค์˜ ์ฃผ๋œ ์‚ฌ์šฉ์ฒ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ
  2. ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น

๋ณดํ†ต ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋กœ๊ทธ์ธ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๊ณ ,
์›น ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์šฉ์ž์˜ ๊ด‘๊ณ  ์„ ํ˜ธ๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

  1. ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•˜์ž
    ์ฟ ํ‚ค์˜ ์ •๋ณด๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ์ถ”๊ฐ€๋กœ ์œ ๋ฐœ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ id๋‚˜ ์ธ์ฆ ํ† ํฐ ๋“ฑ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  2. ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์žˆ๋Š” ์ •๋ณด๋“ค์€ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ์š”์ฒญ์— ์ž๋™์œผ๋กœ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ ๋“ฑ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ

โ–ช ์˜์† ์ฟ ํ‚ค

๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ๊นŒ์ง€๋งŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. 0์ด๋‚˜ ์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ) Set-Cookie: expires=Sat, 26-Dec2020 04:39:21 GMT

โ–ช ์„ธ์…˜ ์ฟ ํ‚ค

๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ๊นŒ์ง€๋งŒ ์œ ์ง€ํ•œ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค - ๋„๋ฉ”์ธ(Domain)

  • ๋„๋ฉ”์ธ ๋ช…์‹œ
    ํ—ค๋”์— ๋„๋ฉ”์ธ์„ ๋ช…์‹œํ•˜๋ฉด ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ์„ ํฌํ•จํ•ด์„œ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    domain=example.org๋ฅผ ์ง€์ •ํ•ด์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด
    example.org+dev.example.org๋ฅผ ํฌํ•จํ•ด์„œ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

  • ๋„๋ฉ”์ธ ์ƒ๋žต
    example.org์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ๋žตํ•˜๊ณ  domain์ง€์ •์„ ์ƒ๋žตํ•œ๋‹ค๋ฉด
    example.org์—์„œ๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ  dev.example.org๋Š” ์ฟ ํ‚ค๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค - ๊ฒฝ๋กœ(Path)

์ฟ ํ‚ค๋Š” ์ง€์ •ํ•œ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ ์ฟ ํ‚ค - ๋ณด์•ˆ

  • Secure
    ์›๋ž˜ ์ฟ ํ‚ค๋Š” http, https๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ „์†กํ•˜์ง€๋งŒ Secure๋ฅผ ์ ์šฉํ•˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

  • HttpOnly
    XSS๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ HTTP์ „์†ก์—๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • SameSite
    XSRF๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜

Leave a comment