๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WEB

[ WEB ] Cookie์— ๋Œ€ํ•œ ์ •๋ฆฌ ๊ธ€

 

Cookie ๋ž€?

 

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

 

์ฟ ํ‚ค๋Š” ๋‘ ์š”์ฒญ์ด ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋“ค์–ด์™”๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ stateless์ธ HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ฟ ํ‚ค๋Š” Key=value ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
ํƒ€์ž…์€ String์ด๊ณ , ๊ณต๊ฐ„ ์ œ์•ฝ์ด ์žˆ์–ด์„œ 4KB ์ด์ƒ ์ €์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

Set-Cookie ๋Š” ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €)๋กœ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. (์‘๋‹ต)

Set-Cookie: <cookie-name>=<cookie-value>โ€‹

 

 

 

 

์ฟ ํ‚ค์˜ ํŠน์ง•

 

- ์ฟ ํ‚ค๋Š” ์œ ํšจ๊ธฐ๊ฐ„์ด ์žˆ๊ณ , ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ์œ ํšจํ•˜๋‹ค. (๊ธฐ๊ฐ„์„ ์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ๊นŒ์ง€๋งŒ ์œ ์ง€๋œ๋‹ค.)

 


- ์ฟ ํ‚ค๋Š” ์ธ์ฆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
       1) ์„ธ์…˜ ๊ด€๋ฆฌ : ์„œ๋ฒ„์— ์ €์žฅํ•ด์•ผ ํ•  ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒŒ์ž„ ์Šค์ฝ”์–ด ๋“ฑ์˜ ์ •๋ณด ๊ด€๋ฆฌ.

       2) ๊ฐœ์ธํ™” : ์‚ฌ์šฉ์ž ์„ ํ˜ธ, ํ…Œ๋งˆ ๋“ฑ์˜ ์„ธํŒ….
       3) ํŠธ๋ž˜ํ‚น : ์‚ฌ์šฉ์ž ํ–‰๋™์„ ๊ธฐ๋กํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ์šฉ๋„.

 

* ๊ณผ๊ฑฐ์—” ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ์ฟ ํ‚ค๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์š”์ฆ˜์€ ์„ฑ๋Šฅ ์ด์Šˆ ๋“ฑ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ Modern APIs์˜ ์ข…๋ฅ˜์ธ ์›น ์Šคํ† ๋ฆฌ์ง€ API ์™€ IndexedDB๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 


- ์„ธ์…˜ ์ฟ ํ‚ค๋Š” ํ˜„์žฌ ์„ธ์…˜์ด ๋๋‚  ๋•Œ ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” "ํ˜„์žฌ ์„ธ์…˜"์ด ๋๋‚˜๋Š” ์‹œ์ ์„ ์ •์˜ํ•œ๋‹ค.


     ์–ด๋–ค ๋ธŒ๋ผ์šฐ์ €๋“ค์€ ์žฌ์‹œ์ž‘ํ•  ๋•Œ ์„ธ์…˜์„ ๋ณต์›ํ•ด์„œ ์„ธ์…˜ ์ฟ ํ‚ค๊ฐ€ ๋ฌด๊ธฐํ•œ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.


- ์ง€์† ์ฟ ํ‚ค๋Š” Expires ๋˜๋Š” Max-Age ๋ผ๋Š” ์†์„ฑ์— ๋ช…์‹œ๋œ ๋‚ ์งœ์— ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค.


- ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ์žˆ๋‹ค. ๐Ÿ‘‰  Native App์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€.


- ๋„๋ฉ”์ธ๊ณผ ํŒจ์Šค ๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” ์ฟ ํ‚ค์˜ ์Šค์ฝ”ํ”„๋ฅผ ์ •์˜ํ•œ๋‹ค.(์–ด๋–ค URL๋กœ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š”์ง€) 

 

** ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ์ •๋ณด ๋“ฑ)๋Š” ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ.(์„ธ์…˜id, ์ธ์ฆ ํ† ํฐ ๋“ฑ)

 

 

 

 

Secure, HttpOnly, SameSite

 

Secure 

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

 

 

HttpOnly 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€(document.cookie)ํ•˜๋„๋ก ํ•˜์—ฌ, XSS(Cross-site-scripting) ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

HTTP ์ „์†ก์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

SameSite 

์ฟ ํ‚ค๊ฐ€ cross-site ์š”์ฒญ ์ „์†ก์„ ์š”๊ตฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ XSRF(์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ) ๊ณต๊ฒฉ ๋ฐฉ์ง€, ์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•œ๋‹ค. ์•„์ง ์‹คํ—˜ ๋‹จ๊ณ„์˜ ์ฟ ํ‚ค๋ผ์„œ ๋ชจ๋“  ๋ถ€๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š๋‹ค.

 

 


 

๐ŸŒธ ์ถœ์ฒ˜ ๐ŸŒธ

 

Cookie- MDN

Set-Cookie - MDN

HTTP ์ฟ ํ‚ค - MDN