๐Ÿช ์ฟ ํ‚ค์— ๋Œ€ํ•ด

Do_Doollyยท2025๋…„ 5์›” 14์ผ
0

Computer Science

๋ชฉ๋ก ๋ณด๊ธฐ
4/4
post-thumbnail
  • ๊ธ€์— ์ ์€ ๋‚ด์šฉ ์ค‘ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ๋Œ“๊ธ€๋กœ ์ ์–ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ฐœ๋ฐœ์ž๋กœ ์ „ํ–ฅํ•˜๊ณ  ์ฒซ ํšŒ์‚ฌ์— ์ž…์‚ฌํ–ˆ์„ ๋•Œ ์ฟ ํ‚ค์˜ ํŠน์„ฑ์„ ์ž˜ ๋ชฐ๋ผ์„œ ๋กœ๊ทธ์ธ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์–ด๋ ค์›€์„ ๊ฒช์€ ๊ธฐ์–ต์ด ์žˆ๋‹ค.

์ง€๊ธˆ์€ ๋‹น์—ฐํ•˜์ง€๋งŒ ๊ทธ ๋•Œ๋Š” ์ฟ ํ‚ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ, ๋„๋ฉ”์ธ ๋ฒ”์œ„, SameSite๊ฐ™์€ ๊ฐœ๋…์ด ์™œ์ผ€ ํ—ท๊ฐˆ๋ ธ๋Š”์ง€... ๐Ÿฅฒ


์ฟ ํ‚ค(Cookie)์˜ ์œ ๋ž˜

์˜์–ด ๋‹จ์–ด๋กœ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋จน๋Š” ๊ทธ ์ฟ ํ‚ค ๋งž๋‹ค! ๐Ÿ˜‹

์ง„์งœ ๋จน๋Š” ์ฟ ํ‚ค์™€ ๊ด€๊ณ„ ์žˆ๋ƒ๊ณ ? ์žˆ๋‹ค. ์•„์ฃผ ๊ฐ„์ ‘์ ์œผ๋กœ.

์ฟ ํ‚ค๋ผ๋Š” ์ด๋ฆ„์€ 1970๋…„๋Œ€ ์œ ๋‹‰์Šค ์‹œ์Šคํ…œ์—์„œ ์“ฐ์ด๋˜ magic cookie๋ผ๋Š” ๊ฐœ๋…์—์„œ ์™”๋‹ค.
magic cookie๋Š” โ€œ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์„ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ† ํฐโ€ ๊ฐ™์€ ๊ฐœ๋…์ด์—ˆ๋‹ค.

ํ˜„๋Œ€ ์›น์—์„œ์˜ ์ฟ ํ‚ค๋„ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ด ๊ฒƒ!

๊ทธ๋Ÿผ โ€˜์™œ ํ•˜ํ•„ ์ฟ ํ‚ค?โ€™ ๐Ÿช

  1. ์ด๋ฆ„์ด ๊ท€์—ฝ๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์›Œ์„œ
  2. ์ž‘๊ณ  ๋ง›์žˆ๊ฒŒ(?) ์ƒ๊ธด ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ ๊ฐ™์•„์„œ
  3. ํฌ์ถ˜ ์ฟ ํ‚ค์ฒ˜๋Ÿผ ์•ˆ์— ๋ญ”๊ฐ€ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค๋Š” ์ƒ์ง•์„ฑ ๋•Œ๋ฌธ์—

์ •ํ™•ํ•œ ๊ธฐ์›์€ ์ •์„ค์ด ์—†์ง€๋งŒ, ์–ด์จŒ๋“  ์ง€๊ธˆ์˜ ์ฟ ํ‚ค๋Š” ์ง„์งœ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์›น ์ƒํƒœ๊ณ„์˜ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ๊ฐ„์‹(?)์ด๋‹ค.

์ฟ ํ‚ค์˜ ์ •์˜

  • ์›น ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•˜๋Š” ์ž‘์€ ํ…์ŠคํŠธ ํŒŒ์ผ
  • ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ (์ฃผ๋กœ ํ•˜๋“œ ๋””์Šคํฌ)์— ์ €์žฅ๋˜๋ฉฐ
  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์ „๊นŒ์ง€๋Š” ์œ ์ง€
  • HTTP ์š”์ฒญ ์‹œ ์ž๋™์œผ๋กœ ํฌํ•จ๋˜์–ด ์ „์†ก
  • HttpOnly ์˜ต์…˜์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    alert(document.cookie); // ๊ฐœ์ธ์ •๋ณด ํ„ธ๋ฆฌ๊ธฐ ๋”ฑ ์ข‹์Œ!
  • โ€œnameโ€ = โ€œvalueโ€ ํ˜•์‹์ด๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๊ตฌ๋ถ„

์ฟ ํ‚ค์˜ ์ฃผ์š” ์šฉ๋„

  1. ์„ธ์…˜ ๊ด€๋ฆฌ
    • ๋กœ๊ทธ์ธ ์ •๋ณด, ์ธ์ฆ ํ† ํฐ, ์‚ฌ์šฉ์ž ์ƒํƒœ ์œ ์ง€ ๋“ฑ์— ์‚ฌ์šฉ
  2. ๊ฐœ์ธํ™”
    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ํ…Œ๋งˆ ์„ค์ •, ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋“ฑ ์ €์žฅ
  3. ์ถ”์ /๊ด‘๊ณ 
    • ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๋ถ„์„, ์‚ฌ์šฉ์ž ํ–‰๋™ ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ์ถ”์ 

์ฟ ํ‚ค์˜ ๋™์ž‘ ์›๋ฆฌ

  1. ์„œ๋ฒ„ -> ํด๋ผ์ด์–ธํŠธ : Set-Cookie ํ—ค๋”๋กœ ์ฟ ํ‚ค ์ „์†ก
  2. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : ์ดํ›„ ์š”์ฒญ ์‹œ Cookie ํ—ค๋”์— ์ž๋™ ํฌํ•จ
  3. ์„œ๋ฒ„๋Š” ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž ์‹๋ณ„

์ฟ ํ‚ค์™€ ๋„๋ฉ”์ธ

  • ์ฟ ํ‚ค๋Š” ๋„๋ฉ”์ธ(Domain) ๊ธฐ๋ฐ˜์œผ๋กœ ์ €์žฅ/์ „์†ก
  • ์ฟ ํ‚ค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑํ•œ ๋„๋ฉ”์ธ์—๋งŒ ์ „์†ก
    • test.com ์—์„œ ๋งŒ๋“  ์ฟ ํ‚ค๋Š” naver.com ์— ์ „์†ก ์•ˆ๋จ
    • www.test.com ๊ณผ test.test.com ๋„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰๋จ
https://www.test.com/api
- 'com' -> ์ตœ์ƒ์œ„ ๋„๋ฉ”์ธ (TLD)
- 'test' -> 2์ฐจ ๋„๋ฉ”์ธ
- 'www' -> ์„œ๋ธŒ ๋„๋ฉ”์ธ
- 'www.test.com' ์€ 'test.com'์˜ ์„œ๋ธŒ๋„๋ฉ”์ธ!

SameSite vs SameOrigin (ํ—ท๊ฐˆ๋ฆผ ์ฃผ์˜!)

  • SameSite
    • ์‚ฌ์ดํŠธ ๋ ˆ๋ฒจ์—์„œ ๋น„๊ต (๋„๋ฉ”์ธ ๊ธฐ์ค€)
    • test.com ๊ณผ www.test.com โ†’ SameSite
    • test.com ๊ณผ naver.com โ†’ CrossSite
    • ์ฟ ํ‚ค ์˜ต์…˜ ์ค‘ SameSite=Lax, Strict, None ๋“ฑ์ด ์žˆ์Œ
  • SameOrigin
    • ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ถœ์ฒ˜(origin) ๋น„๊ต
    • ํ”„๋กœํ† ์ฝœ + ๋„๋ฉ”์ธ + ํฌํŠธ ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•ด์•ผ SameOrigin
    • ์ฆ‰, https://test.com:443 ๊ณผ http://test.com:443 ์€ CrossOrigin
    • CORS ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•จ ๐Ÿ”ฅ

์„œ๋ธŒ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค

  • ์ƒ์œ„ ๋„๋ฉ”์ธ์—์„œ ๋งŒ๋“  ์ฟ ํ‚ค๋Š” ์„œ๋ธŒ ๋„๋ฉ”์ธ์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • www.test.com ์ด๋‚˜ test.test.com ์€ test.com ์—์„œ ๋งŒ๋“  ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

localhost์˜ ํŠน์ˆ˜์„ฑ

  • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์•ˆ ๋˜๋Š” ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๋‹ค! ์™œ๋ƒ๋ฉด localhost๋Š” 127.0.0.1 ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฃจํ”„๋ฐฑ์ด๊ธฐ ๋•Œ๋ฌธ
  • ์ฟ ํ‚ค๋Š” RFC 6265 ์˜ 5.1.3 ๋„๋ฉ”์ธ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
    1. ๋„๋ฉ”์ธ ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด์˜ ์ ‘๋ฏธ์‚ฌ์ผ ๊ฒƒ
    2. ๋ฌธ์ž์—ด์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋Š” โ€œ.โ€ ์ผ ๊ฒƒ
    3. ๋ฌธ์ž์—ด์€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ผ ๊ฒƒ
  • localhost ๋ฅผ localhost.com ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
    sudo vim /etc/hosts
    
    127.0.0.1 localhost.com
    127.0.0.1 bank.localhost.com
  • ๋‹จ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ฒ˜๋Ÿผ ์ธ์‹๋ผ์„œ CORS ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ! -> ๐Ÿ›‘ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ฃผ์˜

๋งˆ๋ฌด๋ฆฌ

  • AWS CloudFront๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์‹ค์ˆ˜ํ•˜์ง€ ๋ง์•„์•ผ ํ• ๊ฒŒ .cloudfront.net ์€ ๋ณด์•ˆ ์ •์ฑ…์ƒ ์ฟ ํ‚ค ์„ค์ •์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Œ
  • ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์ธ์ฆ์ด๋‚˜ ์ƒํƒœ ์ €์žฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, CloudFront ์•ž๋‹จ์—์„œ ๋งž์ถค ๋„๋ฉ”์ธ ์„ค์ •์ด ํ•„์š”!


& ์ฐธ๊ณ  ์ž๋ฃŒ

HTTP ์ฟ ํ‚ค (MDN)
์ฟ ํ‚ค๋ž€? ์ฟ ํ‚ค์˜ ์ •์˜

profile
์ƒ๊ฐํ•˜๋ฉด ๋ณต์žกํ•˜๋‹ˆ๊นŒ ์ผ๋‹จ ํ•ด๋ณด์ž

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