Cookie μ Cookie options (Set-Cookie)
π 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 ) 곡격
β SameSite