Front-end/Browser

Cookie 와 Cookie options (Set-Cookie)

ciocio 2021. 11. 23. 22:30

πŸ“Œ  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

 

 

 

 

λ°˜μ‘ν˜•