๐Ÿช Cookie์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

Yuniยท2022๋…„ 9์›” 13์ผ
1

์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

๋ชฉ๋ก ๋ณด๊ธฐ
34/39
post-thumbnail

๐Ÿšจ HTTP๋Š” ๋ฌด์ƒํƒœ(Stateless) ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„๋‹ค.
๐Ÿ‘‰ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ฟ ํ‚ค๋ž€?

  • ์„œ๋ฒ„๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด๋‹ค. ํ•ด๋‹น ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ฟ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„๋ฉ”์ธ์—๊ฒŒ http ์š”์ฒญ ์‹œ ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ, ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น์— ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ฟ ํ‚ค ์ •๋ณด๋Š” ์ƒ์„ฑ๋œ ์ดํ›„ ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋” ์œ ๋ฐœํ•œ๋‹ค.
    ๐Ÿ‘‰ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ(์„ธ์…˜ id, ์ธ์ฆ ํ† ํฐ)
    ๐Ÿ”Ž ์„œ๋ฒ„ ์ „์†ก๋ง๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์— ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์›น ์Šคํ† ๋ฆฌ์ง€ ์ฐธ๊ณ 

๐Ÿ’€ ์ฃผ์˜ : ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ๋จ(์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ ๋“ฑ)

์ฟ ํ‚ค ์‚ฌ์šฉ

  • Set-Cookie : ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค ์ „๋‹ฌ
    ์˜ˆ) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
  • Cookie : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , HTTP ์š”์ฒญ์‹œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ

๐Ÿช ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์คฌ์„ ๋•Œ ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋‹ค์Œ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•  ๋•Œ ์ฟ ํ‚ค ์ €์žฅ์†Œ๋ฅผ ์กฐํšŒํ•ด์„œ ์กฐํšŒ๋œ ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•˜์—ฌ ์š”์ฒญํ•œ๋‹ค.

์ฟ ํ‚ค ์˜ต์…˜

์ƒ๋ช… ์ฃผ๊ธฐ

  • expires : ๋งŒ๋ฃŒ์ผ์ด ๋˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ
    ์˜ˆ) Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
  • max-age : ์ฟ ํ‚ค๊ฐ€ ์œ ํšจํ•œ ์‹œ๊ฐ„์„ ์ดˆ๋‹จ์œ„๋กœ ์„ค์ •, 0์ด๋‚˜ ์Œ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ
    ์˜ˆ) Set-Cookie: max-age=3600 (3600์ดˆ)
  • ์„ธ์…˜ ์ฟ ํ‚ค: MaxAge๋‚˜ Expires ์˜ต์…˜์ด ์—†๋Š” ์ฟ ํ‚ค๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ์ฟ ํ‚ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ํ•ด๋‹น ์ฟ ํ‚ค ์‚ญ์ œ
  • ์˜์† ์ฟ ํ‚ค: ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด MaxAge๋‚˜ Expires ์˜ต์…˜์— ์ง€์ •๋œ ์‹œ๊ฐ„๋งŒํผ ์ฟ ํ‚ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋„๋ฉ”์ธ(domain)

  • ๋ช…์‹œ : ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ(๋„๋ฉ”์ธ ์•ž์— ์žˆ๋Š” www๊ฐ™์€ ๊ฒƒ) ํฌํ•จ
    • domain=example.org๋ฅผ ์ง€์ •ํ•ด์„œ ์ฟ ํ‚ค ์ƒ์„ฑ
      ๐Ÿ‘‰ example.org, dev.example.org๋„ ์ฟ ํ‚ค ์ ‘๊ทผ
  • ์ƒ๋žต : ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ๋งŒ ์ ์šฉ
    • example.org ์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  domain ์ง€์ •์„ ์ƒ๋žต
      ๐Ÿ‘‰ example.org ์—์„œ๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ

๊ฒฝ๋กœ(path)

  • ์ ์€ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€(/user/login)๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ
  • ์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ •
  • ์„ค์ •๋œ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๋Š” ํ•˜์œ„ ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์„ ํ•ด๋„ ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. path=/user๋ผ๋ฉด /user/login์ธ ๊ฒฝ์šฐ์—๋„ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ

๋ณด์•ˆ

  • Secure
    • Secure์ด true์ธ ๊ฒฝ์šฐ ํ”„๋กœํ† ์ฝœ์ด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ „์†กํ•œ๋‹ค.
  • HttpOnly
    • true์ธ ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€(document.cookie)
    • XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • HTTP ์ „์†ก์—๋งŒ ์‚ฌ์šฉ
  • SameSite
    • XSRF(or CSRF) ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • Lax : Cross-Origin ์š”์ฒญ์ด๋ผ๋ฉด GET ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฟ ํ‚ค ์ „์†ก
    • Strict : Cross-Origin์ด ์•„๋‹Œ same-site ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค ์ „์†ก
    • None : ํ•ญ์ƒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Secure ์˜ต์…˜์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•จ
profile
๋ฐฐ์šด ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Ž

0๊ฐœ์˜ ๋Œ“๊ธ€