[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ]์ฟ ํ‚ค, ์„ธ์…˜

JiEunยท2023๋…„ 5์›” 2์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์ฟ ํ‚ค, ์„ธ์…˜์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๊ณ  ๋‘๊ฐœ์˜ ์ฐจ์ด์  ์žฅ, ๋‹จ์ ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“ ๋ฐฐ์šด ๊ฒƒ

๐Ÿช ์ฟ ํ‚ค(Cookie)

"HTTP๋Š” Stateless(๋ฌด์ƒํƒœ์„ฑ)์ธ๋ฐ ์–ด๋–ป๊ฒŒ ์šฐ๋ฆฌ์˜ ์ •๋ณด ์œ ์ง€๊ฐ€ ๋ ๊นŒ?"

์—์„œ ์ฟ ํ‚ค๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์— ์˜์†์„ฑ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
    - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ
    • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ํ•ด๋‹น ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์ฟ ํ‚ค๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„๋ฉ”์ธ์—๊ฒŒ HTTP ์š”์ฒญ ์‹œ ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.(์ž๋™์œผ๋กœ)
  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ๋ฌด์ƒํƒœ์„ฑ ๋ณด์™„ํ•ด ์ฃผ๋Š” ๋„๊ตฌ
  • ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €(์›น)์—๋งŒ ์กด์žฌํ•œ๋‹ค.
  • ์ฟ ํ‚ค๋Š” HTTP ํ—ค๋” ์‚ฌ์šฉ

์–ด๋””์— ์“ฐ๋Š”์ง€?

  • ์ฟ ํ‚ค๋Š” ์‚ญ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์žฅ๊ธฐ๊ฐ„ ์ €์žฅ(๋ณด์กด)ํ•ด์•ผ ํ•˜๋Š” ์˜ต์…˜์„ ํด๋ผ์ด์–ธํ…Œ ์ €์žฅํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค. (ex - ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฆฌ์ŠคํŠธ ๋“ฑ)

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ํ›„ ์•„๋ฌด๋•Œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ํ›„ ํŠน์ • ์กฐ๊ฑด๋“ค์ด ๋งŒ์กฑ๋ผ์•ผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿช ์ฟ ํ‚ค ์˜ต์…˜

Domain

์„œ๋ฒ„์™€ ์š”์ฒญ์˜ ๋„๋ฉ”์ธ์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ฟ ํ‚ค ์ „์†ก

  • http://www.localhost.com:3000/users/login ์ธ ๊ฒฝ์šฐ Domain์€ http://www.localhost.com

Path

์„œ๋ฒ„์™€ ์š”์ฒญ์˜ ์„ธ๋ถ€ ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜๋Š ๊ฒฝ์šฐ ์ฟ ํ‚ค ์ „์†ก

  • http://www.localhost.com:3000/users/login ์ธ ๊ฒฝ์šฐ Path๋Š” /users/login
  • ๋ช…์‹œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ /์œผ๋กœ ์„ค์ •

MaxAge of Expires

์ฟ ํ‚ค์˜ ์œ ํšจ๊ธฐ๊ฐ„ ์„ค์ • (์„ค์ • ์‹œ ์ผ์ • ์‹œ๊ฐ„ ํ›„ ์ž๋™ ์†Œ๋ฉธ, ์œ ํšจ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํƒˆ์ทจ ์œ„ํ—˜์ด ๋†’๋‹ค.)

  • MaxAge : ์ฟ ํ‚ค๊ฐ€ ์œ ํšจํ•œ ์‹œ๊ฐ„์„ ์ดˆ ๋‹จ์œ„๋กœ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜(์‹œํ•œ๋ถ€ ์˜ต์…˜์„ ์ฃผ๋Š” ๋Š๋‚Œ)
  • Expires : ์–ธ์ œ๊นŒ์ง€ ์ฟ ํ‚ค๊ฐ€ ์œ ํšจํ•œ์ง€ ์‹ฌํŒ์˜ ๋‚ ์„ ์ง€์ •(์ง€์ •๋œ ์‹œ๊ฐ„, ๋‚ ์งœ ์ดˆ๊ณผ ์‹œ ์ฟ ํ‚ค ์ž๋™์œผ๋กœ ์‚ญ์ œ)

    ์„ธ์…˜ ์ฟ ํ‚ค : MaxAge ๋˜๋Š” Expires์˜ต์…˜์ด ์—†๋Š” ์ฟ ํ‚ค(๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ์ฟ ํ‚ค, ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ํ•ด๋‹น ์ฟ ํ‚ค ์‚ญ์ œ)
    ์˜์†์„ฑ ์ฟ ํ‚ค : ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์—ฌ๋ถ€ ์ƒ๊ด€์—†์ด MaxAge ๋˜๋Š” Expires์— ์ง€์ •๋œ ์œ ํšจ์‹œ๊ฐ„ ๋งŒํผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ฟ ํ‚ค

Http Only

์Šคํฌ๋ฆฝํŠธ(<script>)์˜ ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒฐ์ •

  • ์ฟ ํ‚ค๋Š” <script>ํƒœ๊ทธ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. (XSS ๊ณต๊ฒฉ์— ์ทจ์•ฝ)
  • ๋ฏผ๊ฐํ•œ ์ •๋ณด๋‚˜ ๊ฐœ์ธ ์ •๋ณด๋Š” ๋‹ด์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์˜ต์…˜ ๊ฐ’์€ ๊ธฐ๋ณธ์ ์œผ๋กœ true๋กœ ์ง€์ •ํ•œ๋‹ค.(false์ธ ๊ฒฝ์šฐ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ํƒˆ์ทจ ์œ„ํ—˜์ด ์žˆ๋‹ค.)

Sercure

HTTP ํ”„๋กœํ† ์ฝœ์—์„œ๋งŒ ์ฟ ํ‚ค ์ „์†ก ์—ฌ๋ถ€ ๊ฒฐ์ •

  • ์˜ต์…˜ ๊ฐ’์ด true์ธ ๊ฒฝ์šฐ HTTP๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ต์…˜ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ํ”„๋กœํ† ์ฝœ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.(HTTP, HTTPS)

SameSite

CORS ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์˜ต์…˜ ๋ฐ ๋ฉ”์„œ๋“œ์— ๋”ฐ๋ผ ์ฟ ํ‚ค ์ „์†ก ์—ฌ๋ถ€ ๊ฒฐ์ •

  • Lax : GET ๋ฉ”์„œ๋“œ ์š”์ฒญ๋งŒ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ
  • Strict : ์ฟ ํ‚ค ์ „์†ก ๋ถˆ๊ฐ€
  • None : ๋ชจ๋“  ๋ฉ”์„œ๋“œ ์š”์ฒญ์— ๋Œ€ํ•ด ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ (Secure ์ฟ ํ‚ค ์˜ต์…˜์ด ํ•„์š”ํ•˜๋‹ค.)

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

์ฟ ํ‚ค๋Š” ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ์œ ์ง€๋  ์ˆ˜ ์žˆ๊ณ , HttpOnly ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋‹ค.

๐Ÿ“ ์„ธ์…˜(Session)

  • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ƒํƒœ(์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ)
  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์œ ์ผํ•˜๊ณ  ์•”ํ˜ธํ™”๋œ ID๋ฅผ ๋ถ€์—ฌ
  • ์ค‘์š” ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ(๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ)
  • ์ฟ ํ‚ค์—๋Š” ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•„์ด๋””(session_id)๋งŒ ์•”ํ˜ธํ™”๋œ ์ƒํƒœ๋กœ ๋ถ€์—ฌ

์„œ๋ฒ„๋Š” ์ผ์ •์˜ ์ €์žฅ์†Œ์— ์„ธ์…˜์„ ์ €์žฅํ•œ๋‹ค.

  • in-memory(JS ๊ฐ์ฒด ๋น„์Šท), ์„ธ์…˜ ์Šคํ† ์–ด(redis ๋“ฑ๊ณผ ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜์ด ๋น ๋ฅธ KB)
  • ์„ธ์…˜์ด ๋งŒ๋“ค์–ด ์ง€๋ฉด ๊ฐ ์„ธ์…˜์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ์…˜ ์•„์ด๋””๋„ ๋งŒ๋“ค์–ด์ง„๋‹ค.(ํด๋ผ์ด์–ธํŠธ์— ์„ธ์…˜์„ ์ฆ๋ช…ํ•  ์ˆ˜๋‹จ์œผ๋กœ ์„ธ์…˜ ์•„์ด๋”” ์ „๋‹ฌ)

์›น ์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์ธ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ฟ ํ‚ค์—์„œ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•œ ์„ธ์…˜ ์•„์ด๋””๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ์œ ์ €๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ํ•œ์˜์—ญ์„ ์„ธ์…˜ ์œ ์ € ๋ฐ์ดํ„ฐ๋กœ ์ฐจ์ง€ํ•ด ๋ฒ„๋ฆฐ๋‹ค. (์„œ๋ฒ„ ์„ฑ๋Šฅ ์ €ํ•˜)
  • ๊ธฐ์กด ์ฟ ํ‚ค๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•œ๊ฒŒ ์•„๋‹ˆ๊ธฐ์— ์—ฌ์ „ํžˆ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. (XSS ๊ณต๊ฒฉ์— ์—ฌ์ „ํžˆ ์ทจ์•ฝ)

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์ฟ ํ‚ค๋Š” ์ž์ฃผ ๋“ค์–ด๋ด์„œ ์ต์ˆ™ํ–ˆ์ง€๋งŒ ์„ธ์…˜์€ ์ด๋ฒˆ์— ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ, ์„ธ์…˜์€ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ด ํฐ ์ฐจ์ด์ ์ด์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

์„œ๋ฒ„ ์˜์—ญ์€ ๋ฏผ๊ฐํ•œ ๊ฐœ์ธ ์ •๋ณด์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์œผ๋กœ
๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋Š ๋ถ€๋ถ„์„ ์ฟ ํ‚ค, ์„ธ์…˜์œผ๋กœ ๋‹ด์„์ง€ ์ž˜ ๊ฒฐ์ •ํ•ด์•ผํ•  ๊ฑฐ ๊ฐ™๋‹ค.

์ฟ ํ‚ค์˜ ๋‹จ์  ๋ณด์™„ํ•œ๊ฒŒ ์„ธ์…˜์ด์ง€๋งŒ ์„ธ์…˜ ๋˜ํ•œ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.
์ด๋ฅผ ๋ณด์™„ํ•œ๊ฒŒ ํ† ํฐ์ธ๋ฐ ์ด๋ถ€๋ถ„์€ ๋‹ค์Œ ํ•™์Šต์—์„œ ๋ฐฐ์šฐ๊ฒŒ ๋œ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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