๋ฐ˜์‘ํ˜•

๐Ÿ” ์ฟ ํ‚ค(Cookie) ์˜ต์…˜ ์™„๋ฒฝ ์ •๋ฆฌ: HttpOnly, Secure, SameSite์˜ ๋ชจ๋“  ๊ฒƒ

์›น ๊ฐœ๋ฐœ์—์„œ ์ธ์ฆ๊ณผ ๋ณด์•ˆ์„ ๊ณ ๋ฏผํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋งˆ์ฃผ์น˜๋Š” ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ **์ฟ ํ‚ค(Cookie)**์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฟ ํ‚ค ์„ค์ • ์‹œ ๋“ฑ์žฅํ•˜๋Š” HttpOnly, Secure, SameSite ์˜ต์…˜์ด ์ •ํ™•ํžˆ ๋ญ˜ ์˜๋ฏธํ•˜๊ณ , ์–ด๋–ค ๋ณด์•ˆ ์ด์Šˆ๋ฅผ ๋ง‰์•„์ฃผ๋Š”์ง€ ํ™•์‹คํ•˜๊ฒŒ ์•„๋Š” ์‚ฌ๋žŒ์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ๊ผญ ์•Œ์•„์•ผ ํ•  ์ฟ ํ‚ค ์˜ต์…˜๋“ค์˜ ๊ธฐ๋Šฅ, ๋ณด์•ˆ ๋ชฉ์ , ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ์ •๋ฆฌํ•ด๋“œ๋ฆด๊ฒŒ์š”.


๐Ÿช ์ฟ ํ‚ค๋ž€?

์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„๊ฐ€ Set-Cookie ํ—ค๋”๋กœ ๊ฐ’์„ ๋‚ด๋ ค์ฃผ๋ฉด,
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ ,
  • ์ดํ›„ ๊ฐ™์€ ๋„๋ฉ”์ธ ์š”์ฒญ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ํ™œ์šฉ ์˜ˆ:

  • ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€ (์„ธ์…˜ ID / JWT)
  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํƒœ ์ €์žฅ
  • ์‚ฌ์šฉ์ž ์„ค์ • ๊ธฐ์–ต (์–ธ์–ด, ํ…Œ๋งˆ ๋“ฑ)

โœ… ์ฃผ์š” ์ฟ ํ‚ค ์˜ต์…˜ ์ •๋ฆฌ

์˜ต์…˜๋ช…์„ค๋ช…๋ฐฉ์–ดํ•˜๋Š” ๋ณด์•ˆ ์œ„ํ˜‘
HttpOnly JS์—์„œ ์ฟ ํ‚ค ์ ‘๊ทผ ๋ถˆ๊ฐ€ XSS (์Šคํฌ๋ฆฝํŠธ ํƒˆ์ทจ)
Secure HTTPS ์—ฐ๊ฒฐ์—์„œ๋งŒ ์ „์†ก ํŒจํ‚ท ๋„์ฒญ, MITM
SameSite ์™ธ๋ถ€ ์š”์ฒญ ์‹œ ์ฟ ํ‚ค ์ „์†ก ์—ฌ๋ถ€ ์ œ์–ด CSRF (์š”์ฒญ ์œ„์กฐ)
Path ํŠน์ • ๊ฒฝ๋กœ์—๋งŒ ์ฟ ํ‚ค ์ „์†ก ์ œํ•œ๋œ ๋ฒ”์œ„ ์ ์šฉ
Domain ์„œ๋ธŒ๋„๋ฉ”์ธ ๊ณต์œ  ์—ฌ๋ถ€ ๋„๋ฉ”์ธ ์Šค์ฝ”ํ”„ ์„ค์ •
Max-Age / Expires ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ • ์ž๋™ ์‚ญ์ œ
SameParty ์ œ3์ž ์ฟ ํ‚ค ์ œํ•œ ํšŒํ”ผ (์‹คํ—˜์ ) Chrome Privacy Sandbox ๋Œ€์‘
 

๐Ÿ” HttpOnly: JavaScript ์ ‘๊ทผ ์ฐจ๋‹จ

Set-Cookie: token=abc123; HttpOnly
  • โœ… ์ฟ ํ‚ค๋ฅผ JavaScript์—์„œ document.cookie๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • โœ… XSS ๊ณต๊ฒฉ ์‹œ์—๋„ ์ฟ ํ‚ค๋ฅผ ํ›”์น  ์ˆ˜ ์—†์Œ
  • โŒ JS๋กœ ํ† ํฐ์„ ๊บผ๋‚ด์„œ Authorization ํ—ค๋”๋กœ ์ง์ ‘ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

๐Ÿ’ก ์‹ค๋ฌด ํŒ: ์ธ์ฆ ๊ด€๋ จ ์ฟ ํ‚ค(์„ธ์…˜ ID, Access Token)๋Š” ๋ฐ˜๋“œ์‹œ HttpOnly ์„ค์ •!


๐Ÿ”’ Secure: HTTPS์—์„œ๋งŒ ์ „์†ก

Set-Cookie: token=abc123; Secure
  • โœ… HTTPS ์—ฐ๊ฒฐ์ผ ๋•Œ๋งŒ ์„œ๋ฒ„๋กœ ์ฟ ํ‚ค ์ „์†ก
  • โŒ HTTP ์š”์ฒญ์—๋Š” ์ „์†ก๋˜์ง€ ์•Š์Œ (MITM ๋ฐฉ์ง€)
  • ๐Ÿ“Œ Secure์ด ์—†๋Š” ์ฟ ํ‚ค๋Š” ํ‰๋ฌธ HTTP ์š”์ฒญ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก ์‹ค๋ฌด ํŒ: Secure ์ฟ ํ‚ค๋ฅผ ์“ฐ๋ ค๋ฉด HTTPS ํ™˜๊ฒฝ์ด ๊ธฐ๋ณธ ์ „์ œ์ž…๋‹ˆ๋‹ค. ์šด์˜ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•˜์„ธ์š”.


๐Ÿ›ก๏ธ SameSite: CSRF ๋ฐฉ์–ด์˜ ํ•ต์‹ฌ

Set-Cookie: token=abc123; SameSite=Strict
๊ฐ’์„ค๋ช…
Strict ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ์œ ์ž…๋œ ์š”์ฒญ์€ ๋ชจ๋‘ ์ฟ ํ‚ค ์ฐจ๋‹จ (๊ฐ€์žฅ ์•ˆ์ „)
Lax GET์ด๋‚˜ a ๋งํฌ, form ์ „์†ก ๋“ฑ์€ ํ—ˆ์šฉ / JS fetch ๋“ฑ์€ ์ฐจ๋‹จ
None ๋ชจ๋“  ์™ธ๋ถ€ ์š”์ฒญ์— ํ—ˆ์šฉ (๋‹จ, Secure ํ•„์ˆ˜)
 

๐Ÿ’ก ์‹ค๋ฌด ํŒ: ์ธ์ฆ ๊ด€๋ จ ์ฟ ํ‚ค์—๋Š” ๋ณดํ†ต SameSite=Strict ๋˜๋Š” Lax๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. None์€ ์ œ3์ž ์ฟ ํ‚ค ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.


๐Ÿ“ Path, Domain: ์ ์šฉ ๋ฒ”์œ„ ์ œ์–ด

Set-Cookie: theme=dark; Path=/settings
  • Path=/settings: /settings ์ดํ•˜์—์„œ๋งŒ ์ „์†ก
  • Domain=example.com: sub.example.com์—์„œ๋„ ๊ณต์œ  ๊ฐ€๋Šฅ

๐Ÿ’ก ์‹ค๋ฌด ํŒ: ๋ณด์•ˆ์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋„“์€ ๋ฒ”์œ„๋Š” ํ”ผํ•˜์„ธ์š”.


โฐ Max-Age, Expires: ์ฟ ํ‚ค ์ˆ˜๋ช…

Set-Cookie: token=abc123; Max-Age=900
  • Max-Age=900: 900์ดˆ(15๋ถ„) ํ›„ ๋งŒ๋ฃŒ
  • Expires=Wed, 21 Oct 2025 07:28:00 GMT: ์ง€์ •๋œ ๋‚ ์งœ/์‹œ๊ฐ„์— ๋งŒ๋ฃŒ

์„ค์ •์ด ์—†์œผ๋ฉด ์„ธ์…˜ ์ฟ ํ‚ค๊ฐ€ ๋˜์–ด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.


โœ… ์‹ค๋ฌด ์˜ˆ์‹œ: ๋กœ๊ทธ์ธ ์ฟ ํ‚ค ์„ค์ •

Set-Cookie: access_token=eyJ...; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=900
  • ๐Ÿ” JS ์ ‘๊ทผ ๋ถˆ๊ฐ€ (HttpOnly)
  • ๐Ÿ”’ HTTPS ํ™˜๊ฒฝ์—์„œ๋งŒ ์ „์†ก (Secure)
  • ๐Ÿ›ก๏ธ CSRF ๋ฐฉ์ง€ (SameSite=Strict)
  • โฐ 15๋ถ„ ํ›„ ์ž๋™ ๋งŒ๋ฃŒ (Max-Age)

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

์˜ต์…˜์„ค๋ช…๊ถŒ์žฅ ์—ฌ๋ถ€
HttpOnly JS ์ ‘๊ทผ ์ฐจ๋‹จ โœ… ํ•ญ์ƒ ์‚ฌ์šฉ
Secure HTTPS์—์„œ๋งŒ ์ „์†ก โœ… ์šด์˜ํ™˜๊ฒฝ ํ•„์ˆ˜
SameSite ์™ธ๋ถ€ ์š”์ฒญ ์ œํ•œ โœ… CSRF ๋ฐฉ์–ด
Max-Age ์œ ํšจ ๊ธฐ๊ฐ„ ์„ค์ • โœ… ํ•„์š”์‹œ ์‚ฌ์šฉ
 

๐Ÿ’ฌ ๋งˆ์น˜๋ฉฐ

์ฟ ํ‚ค๋Š” ๋‹จ์ˆœํ•œ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ณด์•ˆ ์„ค์ • ํ•˜๋‚˜๋กœ๋„ ์ „์ฒด ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์„ ์ขŒ์šฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฏผ๊ฐํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ธ์ฆ๊ณผ ์„ธ์…˜ ์ฒ˜๋ฆฌ์— ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” HttpOnly, Secure, SameSite๋Š” ์‚ฌ์‹ค์ƒ ํ•„์ˆ˜ ์˜ต์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ์€ ๊ตฌํ˜„๋ณด๋‹ค ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.
์กฐ๊ธˆ๋งŒ ์‹ ๊ฒฝ ์“ฐ๋ฉด ๋” ์•ˆ์ „ํ•œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

+ Recent posts