๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Front-end/Browser

Cookie ์™€ Cookie options (Set-Cookie)

by ciocio 2021. 11. 23.

๐Ÿ“Œ  Cookie ?

 

์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์— data ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฌธ์ž์—ด์„ ๋งํ•œ๋‹ค.

์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์— cookie ๋ฅผ ์ „์†กํ•  ์ˆ˜๋„ ์žˆ๊ณ ,

ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ cookie ๋ฅผ ์ „์†กํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

->  cookie ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์›ํ•  ๋•Œ ๋ถˆ๋Ÿฌ์™€ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ—พ  Cookie ํ˜•์‹

 

<cookie_name>=<cookie_value>

 

์ฟ ํ‚ค๋Š” name=value ์Œ์œผ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

 

๐Ÿ“Œ  Cookie Options ?

 

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— cookie ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฑด ๋ง˜๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ

์—ญ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฑด, ์ง€์ •๋œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

cookie์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค ( ์กฐ๊ฑด ์„ค์ •์€ option์ž„ ).

 

 

โœ”  Expires=<date>

 

์œ ํšจ ์ผ์ž option.

expires option ์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํž ๋•Œ cookie ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. (Default) 

 

: Expires=Sun, 21 July 2030 02:35:10 GMT

 

expires option ์„ ์„ค์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.

( ๋ฌผ๋ก  ์œ ํšจ ์ผ์ž๋ฅผ ์•„์ฃผ ์งง๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํžˆ๊ธฐ ์ „์—๋„ cookie๋Š” ์‚ญ์ œ๋œ๋‹ค. )

 

// cookie์˜ ์œ ํšจ ์ผ์ž๋Š” ๋ฐ˜๋“œ์‹œ GMT(Greenwich Mean Time) ํฌ๋งท์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
// date.toUTCString ์„ ์‚ฌ์šฉํ•˜๋ฉด GMTํฌ๋งท์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์œ ํšจ ๊ธฐ๊ฐ„์ด ํ•˜๋ฃจ์ธ cookie ์„ค์ •
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();

document.cookie = 'user=Peter; expires=' + date;

 

 

โœ”  Max-Age=<number>

 

๋งŒ๋ฃŒ ๊ธฐ๊ฐ„ option.

max-age option ์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํž ๋•Œ cookie ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. (Default) 

 

: Max-Age=3600

 

max-age option ์€ expires option ๋Œ€์‹  cookie ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์ดˆ ๋‹จ์œ„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

cookie ์— ๋‘˜ ๋‹ค ์ง€์ •๋˜์—ˆ์„ ๋•Œ, expires ๋ณด๋‹ค max-age ๊ฐ€ ์šฐ์„ ์‹œ๋œ๋‹ค.

( 0 ์ด๋‚˜ ์Œ์ˆ˜๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด cookie ๋Š” ๋ฐ”๋กœ ์‚ญ์ œ๋œ๋‹ค. )

 

// 1์‹œ๊ฐ„ ๋’ค์— cookie ์‚ญ์ œ
document.cookie = 'user=Peter; max-age=3600';

// cookie ๋ฐ”๋กœ ์‚ญ์ œ
document.cookie = 'user=Peter; max-age=0';

 

 

โœ”  Domain=<domain-value>

 

cookie ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ์„ ์ง€์ •ํ•˜๋Š” option.

domain option ์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๋ฌธ์„œ์˜ URI ๋งŒ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

->  ์ด๋ ‡๊ฒŒ๋˜๋ฉด ํ˜„์žฌ URI์˜ ํ˜•์ œ URI ๊ฒฉ์ธ ์„œ๋ธŒ ๋„๋ฉ”์ธ์€ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

->  ex. site.com(๋ฉ”์ธ ๋„๋ฉ”์ธ) : cookie ์ ‘๊ทผ O  /  kind.site.com(์„œ๋ธŒ ๋„๋ฉ”์ธ) : cookie ์ ‘๊ทผ X

 

: Domain=site.com

: Domain=.site.com

 

domain option ์„ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์„ค์ •ํ•œ ๋„๋ฉ”์ธ์€ ๋ฌผ๋ก ์ด๊ณ  ์„œ๋ธŒ ๋„๋ฉ”์ธ๊นŒ์ง€ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

// site.com ์—์„œ cookie ์„ค์ •
// kind.site.com์—์„œ๋Š” cookie์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ
document.cookie = 'user=Peter';

// site.com ์—์„œ cookie ์„ค์ •
// kind.site.com์—์„œ๋„ cookie์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
document.cookie = 'user=Peter; domain=site.com';

 

 

โœ”  Path=<path-value>

 

cookie ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ URL path ๋ฅผ ์ง€์ •ํ•˜๋Š” option.

path option ์ด ์ง€์ •๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๊ฒฝ๋กœ๊ฐ€ ์„ค์ •๋˜๊ณ  ํ˜„์žฌ ๋ฌธ์„œ์˜ URI ๋งŒ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

: Path=/mypath

 

path option ์„ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์ด ๊ฒฝ๋กœ๋‚˜ ํ•˜์œ„ ๊ฒฝ๋กœ์— ์žˆ๋Š” ํŽ˜์ด์ง€๋งŒ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

->  path=/mypath ์˜ต์…˜์„ cookie ์— ์„ค์ •ํ•˜๋ฉด /mypath ๋‚˜ /mypath/something ์€ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ

->  /home ์ด๋‚˜ /mypage ์—์„œ๋Š” cookie์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค !

 

// ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์›น ์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
document.cookie = 'user=Peter; path=/'

 

 

โœ”  Secure

 

HTTP๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฒฝ์šฐ์— cookie ์ ‘๊ทผ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” option.

๊ธฐ๋ณธ์ ์œผ๋กœ cookie ๋Š” ๋„๋ฉ”์ธ๋งŒ ํ™•์ธํ•œ๋‹ค. ํ”„๋กœํ† ์ฝœ์€ ๋”ฐ์ง€์ง€ ์•Š๋Š”๋‹ค.

secure option ์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด HTTP, HTTPS ํ”„๋กœํ† ์ฝœ ๋ชจ๋‘ ์–‘๋ฐฉ์œผ๋กœ cookie ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

: Secure

 

secure option ์„ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด HTTPS ์—์„œ ์„ค์ •๋œ cookie ๋Š” HTTP ์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•œ๋‹ค.

HTTPS ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ cookie ์ ‘๊ทผ ํ—ˆ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ secure option ์„ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

// ๋ณด์•ˆ ๊ฐ•ํ™” !
document.cookie = 'user=Peter; secure';

 

 

โœ”  HttpOnly

 

ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ Script ๋ฌธ์„œ๊ฐ€ cookie ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” option. ( set-cookie ์†์„ฑ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ok )

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๊ฐ€ document.cookie ๋ฅผ ํ†ตํ•ด ์ฟ ํ‚ค๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๊ฒŒ ์ฐจ๋‹จํ•œ๋‹ค.

ํ•ด์ปค๊ฐ€ ์•…์„ฑ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์ด์Šˆ ( XSS )๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

: HttpOnly

 

๋ณดํ†ต cookie ์„ค์ •ํ•  ๋•Œ ์ด ์˜ต์…˜์€ ๊ผญ ๋„ฃ์–ด์ค€๋‹ค. ( ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๊ณ ์„œ์•ผ !! )

 

 

๐Ÿ“  XSS ๊ณต๊ฒฉ

 

2021.11.24 - [the others/Network Security] - Cross-Site Scripting ( XSS ) ๊ณต๊ฒฉ

 

Cross-Site Scripting ( XSS ) ๊ณต๊ฒฉ

๐Ÿ“Œ XSS ? Cross-site Scripting ์˜ ์•ฝ์ž์ด๋ฉฐ, ์›น ์ƒ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ธฐ์ดˆ์ ์ธ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•์˜ ์ผ์ข…. ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฒฉํ•˜๋ ค๋Š” ์‚ฌ์ดํŠธ์— script ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•œ๋‹ค. ( script์˜ ํ˜•ํƒœ๋Š” ๋‹ค์–‘ํ•˜๋‹ค ) ๋ณดํ†ต ์‚ฌ

code-designer.tistory.com

 

 

โœ”  SameSite

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€