๋ชฉ์ฐจ
๐ Cookie
: ๋ฐ์ดํฐ์ด๋ฉด์, ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์ฌ์ฉํ๋ ์ปดํจํฐ(๋ธ๋ผ์ฐ์ )์ ์์ ํ
์คํธ ํ์ผ๋ก ์ ์ฅ๋์ด์๋ ๊ฒ
- ์๋ฅผ ๋ค์ด ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ด์ ๊ฒฝ์ฐ, 'ํ๋ฃจ ์ด์ฐฝ์ ๋ณด์ง ์๊ธฐ'ํด๋ฆญ์ ๊ณ์ ์ ๋ณผ์ ์์, ๋ก๊ทธ์ธ์ ์ํด ๋ก๊ทธ์ธ ์ ๋ณด ์ ์ฅ, ์๋ ๋ก๊ทธ์ธ ๊ฐ์ ๊ฒฝ์ฐ
โก๏ธ ๋ธ๋ผ์ฐ์ ๋ ๋ด์ฉ์ ๊ธฐ์ตํ ๊ณต๊ฐ์ด X, ๊ธฐ์ตํด์ฃผ๋ ๊ฒ์ ์ฟ ํค!
- ์ฌ์ฉ์ ๋จ์๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ๋จ์๋ก ์์ฑ์ด ๋จ
- ๋ค๋ฅธ ๋๋ฉ์ธ์ ๋์ ํ์ฌ ์ฟ ํค ๋ฐ๊ธ ๋ถ๊ฐ
- ์ฟ ํค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋จ์ํ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ฅผ ์ ์กํ๋ ๊ฒ๋ง ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ, ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ฟ ํค๋ฅผ ๋ค์ ์ ์กํ๋๊ฒ๋ ํฌํจ๋จ
- ์ฟ ํค์ ์ ์ฅ๋ฐฉ์์ key:value (ex, username = ํ๊ธธ๋)
Q : ๊ทธ๋ ๋ค๋ฉด, ์ฟ ํค๋ ์ ์ฌ์ฉ์ ํ๋ ๊ฑธ๊น?
A : ์ ์ผ ํฐ ์ด์ ๋ ์ฌ์ฉ์์ ํธ์๋ฅผ ์ํด์์ด๋ค.
์ํ๋ฅผ ์ ์ฅํ ์ ์๋ http, ํ๋กํ ์ฝ ํน์ฑ์ ์ฟ ํค๋ฅผ ์ด์ฉํด์ ์ํ๋ฅผ ์ ์ฅํจ
Cookie ์ธ์ฆ ๋ฐฉ์
- ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ์์ฑํ ๋, ํด๋ผ๋ฆฌ์ธํธ ์ธก์ ์ ์ฅํ๊ณ ์ถ์ ์ ๋ณด๋ฅผ ์๋ต ํค๋์ Set-Cookie์ ๋ด์
- ์ดํ ํด๋น ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ณด๋ผ๋๋ง๋ค ๋งค๋ฒ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์์ฒญ ํค๋์ Cookie์ ๋ด์ ๋ณด๋ธ๋ค. ์๋ฒ๋ ์ฟ ํค์ ๋ด๊ธด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํด๋น ์์ฒญ์ ํด๋ผ๋ฆฌ์ธํธ๊ฐ ๋๊ตฐ์ง ์๋ณํ๊ฑฐ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ถ์ฒ ๊ด๊ณ ๋ฅผ ๋์ฐ๊ฑฐ๋ ํ๋ค
Cookie ์ต์
์ข
๋ฅ
1. Domain
: ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ www.google.com๊ณผ ๊ฐ์ ์๋ฒ์ ์ ์ํ ์ ์๋ ์ด๋ฆ
- ํด๋น ๋๋งค์ธ์ ์๋ธ ๋๋ฉ์ธ๊น์ง ๋ชจ๋ ํฌํจ, ์ธ๋ถ ๊ฒฝ๋ก๋ฅผ ํฌํจ X
๐ ์๋ธ ๋๋ฉ์ธ์ด๋? : www ๊ฐ์ ๋๋ฉ์ธ ์์ ์ถ๊ฐ๋ก ์์ฑ๋๋ ๋ถ๋ถ
- ์๋ฅผ ๋ค์ด, ์์ฒญํด์ผ ํ URL์ด [http://www.localhost.com:3000/users/login]์ด๋ผ ํ๋ฉด ์ฌ๊ธฐ์์ Domain์ localhost.com์ด ๋จ
2. Path
: ์ธ๋ถ ๊ฒฝ๋ก๋ก์จ ์๋ฒ๊ฐ ๋ผ์ฐํ
ํ ๋ ์ฌ์ฉํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ฏธ
- ์ฟ ํค์ ํด๋น ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ฉด, ํด๋น ํ์ด์ง ๊ฒฝ๋ก์์๋ง ์ฟ ํค ์ฌ์ฉ ์ ๊ทผ์ด ๊ฐ๋ฅ
- ํด๋น ๊ฒฝ๋ก์ ํ์ ๊ฒฝ๋ก๊น์ง ๋ชจ๋ ํฌํจ. ๋ฃจํธ ๊ฒฝ๋ก (/)๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ๊ฒฝ๋ก์ ์ฟ ํค๊ฐ ์ ํจํ๋ค๋ ๋ป
- path=/home ์ง์ ์
- /home/level1 -> ์ ๊ทผ ๊ฐ๋ฅ
- /home/levelq/level2 -> ์ ๊ทผ๊ฐ๋ฅ
- /hello -> ์ ๊ทผ ๋ถ๊ฐ๋ฅ (๋ค๋ฅธ ๊ฒฝ๋ก)
- path๋ฅผ ์
๋ ฅํ์ง ์์ผ๋ฉด ๋ฃจํธ ๊ฒฝ๋ก๋ก ์๋ ์
๋ ฅ๋จ
3. Expires/ Max-age
: ์ ํจ๊ธฐ๊ฐ(๋ง๋ฃ์ผ) ์ค์
expires=Sat, 26-Dec-2020 04:39:21 GMT
- ๊ตฌ์ฒด์ ์ธ ๋ ์ง๋ฅผ ๋ช
์
- ๋ง๋ฃ์ผ์ด ์ง๋๋ฉด ์ฟ ํค ์ญ์
max-age=3600
- ์ด ๋จ์๋ก ์ ํจ ์๊ฐ์ ๋ช
์
- ๋ง์ผ 0์ด๋ ์์๋ก ์ง์ ํ ๊ฒฝ์ฐ ์ฟ ํค๋ ์ญ์ ๋จ
- ์ธ์
์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ข
๋ฃ์๊น์ง๋ง ์ ์ง
- ์์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์
๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์ง
4. Secure
: ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ๋ฐ๋ฅธ ์ฟ ํค์ ์ ์ก ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์ต์
- ํ์ฑํํ๋ฉด HTTPS ์ฌ์ฉ์์๋ง ์ฟ ํค ์ ๋ณด ์ ๋ฌ(๋ฏธ์ ์ฉ์ HTTP๋ ์ ๋ฌ)
- ๋๋ฉ์ธ์ด
localhost
์ธ ๊ฒฝ์ฐ HTTPS๊ฐ ์๋์ด๋ ์ฟ ํค ์ ์ก์ด ๊ฐ๋ฅ (๊ฐ๋ฐ๋จ๊ณ์์ localhost
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์๊ธด ์์ธ์ฌํญ)
5.HttpOnly
: ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์
- ํด์ปค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฟ ํค๋ฅผ ํ์ทจํ ์ ์์ด์, XSS ๊ณต๊ฒฉ ๋ฐฉ์ง๊ฐ๋ฅ
- ์ฟ ํค๋ ๊ผญ ์๋ฒ์์ ๋ง๋ค์ด ๋ฐํํ์ฌ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์๋ ์ผ๋ง๋ ์ง ํด๋ผ์ด์ธํธ์์๋ ์ฌ์ฉํ ์ ์์
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT";
alert(document.cookie);
โก๏ธ ์ฝ์๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ฉด HttpOnly๊ฐ true์ธ test3๋ ๋ณด์ด์ง ์์
console.log(document.cookie);
6. SameSite
: ์๋ ํํฐ ์ฟ ํค์ ๋ณด์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ธฐ์
- ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค ์ ๋ณด ๋ด์ ๋๋ฉ์ธ์ด ๋ค๋ฅธ ํฌ๋ก์ค ์ฌ์ดํธ(cross site)๋ก ์ ์กํ๋ ์์ฒญ์ ๋ํด์ ์ ํ์ ๋ ์ ์์
- Cross-Origin : ์๋ฒ์ ๋๋ฉ์ธ, ํ๋กํ ์ฝ, ํฌํธ ์ค ํ๋๋ผ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ
- Cross-Site : eTLD+1์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
- eTLD+1
- TLD : .com, .org, .kr, .io ๊ฐ์ด ๋๋ฉ์ธ์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ถ๋ถ
- eTLD : ์ฌ์ดํธ๋ฅผ ์๋ณํ ์ ์์ ๋งํผ ์ธ๋ถํ๋ TLD๋ฅผ ๋งํ์ฌ, .kr, .io ๊ฐ์ TML๋ ํ์ ๋๋ฉ์ธ์ ํ๋ ๋ ๋ํ .co.kr, .github.io๋ฑ์ eTLD๋ผ๊ณ ํ๋จํจ
- eTLD+1 : eTLD ๋ฐ๋ก ์ผ์ชพ์ ํ์ ๋ ๋ฒจ ๋๋ฉ์ธ์ ํฉํ ๊ฒ
- ์๋ฅผ ๋ค์ด, [https://code.github.io] vs [https://states.github.io] โ ๋ ์ฃผ์ ๋ชจ๋ eTLD๊ฐ github.io๋ก ๊ฐ์ง๋ง, eTLD+1์ ๊ฐ๊ฐ code.github.io, states.github.io๋ก ๋ค๋ฅด๋ฏ๋ก Cross-Site
๐ ์๋ ํํฐ๋?
: ์ฟ ํค ๋๋ฉ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ํ ๋ค๋ฅธ ๋๋ฉ์ธ์ผ๋ก ์ค์ ๋ ์ฟ ํค
์๋ฅผ๋ค์ด, ์ฌ์ฉ์๊ฐ Example ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํด์ ๋ก๊ทธ์ธ์ ํ๋ค๋ฉด ๋ค์ ๋ก๊ทธ์ธํ ๋ ์ ๋ณด๋ฅผ ๋ค์ ์
๋ ฅํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ผ ์ ์๋๋ก Example ์ฌ์ดํธ์์ ์ฌ์ฉ์์ ์น๋ธ๋ผ์ฐ์ ๋ก Cookie A๊ฐ ๋ถ์ฌ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ์นํ์ด์ง๋ ์ฐ์ธก์ ๋ฐฐ๋ ๊ด๊ณ ๊ฐ ํ์๋๋๋ฐ ์ด ๋ฐฐ๋ ๊ด๊ณ ๋ Adserver ์ฌ์ดํธ์์ ์ ๋ฌ๋๊ณ ์๋ค๊ณ ํ๋ค. ์ด ๋ฐฐ๋๋ฅผ ํตํด ์ฌ์ฉ์์ ์น๋ธ๋ผ์ฐ์ ์ ๋ค๋ฅธ ๋๋ฉ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ๋ Cookie B๊ฐ ๋ถ์ฌ๋๊ฒ ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ๊ณ ์๋ ๋๋ฉ์ธ์์ ๋ฐํ๋๋ Cookie A๋ฅผ ํผ์คํธ ํํฐ ์ฟ ํค(First-party Cookie) ์ด๋ฉฐ, ํ ๋๋ฉ์ธ์์ ๋ฐํ๋๋ Cookie B๋ฅผ ์๋ ํํฐ ์ฟ ํค(Third-party Cookie)๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค.
์ด ์๋ ํํฐ ์ฟ ํค๋ ์ฃผ๋ก ํ๊น ๋ง์ผํ
๊ด๊ณ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์๋ฅผ๋ค์ด ์ ๋ฐ ์ผํ๋ชฐ ์ฌ์ดํธ๋ฅผ ์์ฃผ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ฉด ์ฟ ํค๊ฐ ์ ์ฅ๋๊ฒ ๋๊ณ ๊ตฌ๊ธ ์ ๋์ผ์ค๊ฐ ์ด๋ฅผ ๊ฐ์ ธ๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ์์์ ๋ฐฐ๋ ๊ด๊ณ ์์ ์ ๋ฐ ๊ด๊ณ ๊ฐ ํ๋ฉด์ ๋ํ๋๋ ๊ฒ์ด ์๋ ํํฐ ์ฟ ํค๋ฅผ ์ด์ฉํ ์๋ฆฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
Same-site ์์ฑ
- None : ์ฟ ํค๋ ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ์ ๊ฒฝ์ฐ์ ํญ์ ์ ์ก, ์ฟ ํค ์ต์
์ค Secure ์ต์
์ด ํ์๋ก ํจ
- Strict : ์ฟ ํค๋ ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ์๋ ํญ์ ์ ์ก๋์ง ์์ (๊ฐ์ฅ ๋ณด์์ ), Same-site์ ๊ฒฝ์ฐ์๋ง ์ฟ ํค ์ ์ก
- Lax : Strict์ ๋นํด ์๋์ ์ผ๋ก ๋์จํ ์์ฑ
Cookie ๋ฐฉ์์ ๋จ์
- ๋ณด์์ ์ทจ์ฝ
์์ฒญ์ ์ฟ ํค์ ๊ฐ์ ๊ทธ๋๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ ์ถ ๋ฐ ์กฐ์์ ๋นํ ์ํ์ด ์กด์ฌ
- ์ฟ ํค์๋ ์ฉ๋ ์ ํ์ด ์์ด ๋ง์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์
- ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค์ ๋ํ ์ง์ ํํ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณต์ ๊ฐ ๋ถ๊ฐ๋ฅ
- ์ฟ ํค์ ์ฌ์ด์ฆ๊ฐ ํฌ๋ฉด ํด์๋ก ๋คํธ์ํฌ์ ๋ถํ๊ฐ ์ฌํด์ง
๐ Session
: ์๋ฒ๊ฐ Client์ ์ ์ผํ๊ณ ์ํธํ๋ ID๋ฅผ ๋ถ์ฌํ๊ณ ์ค์ ๋ฐ์ดํฐ๋ ์๋ฒ์์ ๊ด๋ฆฌ
Q : ์ธ์
๊ฐ์ฒด๋ ์ด๋ค ํํ๋ก ์ด๋ฃจ์ด์ ธ์๋?
A: ์ธ์
๊ฐ์ฒด๋ Key์ ํด๋นํ๋ SESSION ID์ ์ด์ ๋์ํ๋ Value๋ก ๊ตฌ์ฑ๋์ด ์๋ฐ.
Value์๋ ์ธ์
์์ฑ ์๊ฐ, ๋ง์ง๋ง ์ ๊ทผ ์๊ฐ ๋ฐ User๊ฐ ์ ์ฅํ ์์ฑ ๋ฑ์ด Map ํํ๋ก ์ ์ฅ๋๋ค.
Session ์ธ์ฆ ๋ฐฉ์
- ์ ์ ๊ฐ ์น์ฌ์ดํธ์์ ๋ก๊ทธ์ธํ๋ฉด ์ธ์
์ด ์๋ฒ ๋ฉ๋ชจ๋ฆฌ(DB)์์ ์ ์ฅ๋๋ค.
์ด๋, ์ธ์
์ ์๋ณํ๊ธฐ์ํ Session ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์๋ค๊ฐ Session ID๋ฅผ ์ ์ฅํ๋ค.
- ์ฟ ํค์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์ฌ์ดํธ์ ๋ํ ๋ชจ๋ Request์ Session ID๋ฅผ ์ฟ ํค์ ๋ด์ ์ ์กํ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ Sesssion ID์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ด๋ฆฌํ๊ณ ์๋ Session ID๋ฅผ ๋น๊ตํ์ฌ ์ธ์ฆ์ ์ํํ๋ค.
[์์]
Q : ์ธ์
์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
A : ์ฟ ํค์ SessionId ์ธ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ์ง ์์์ผ๋ก์จ ์์ ์ฑ์ด ํ๋ณด๋๋ค
Session ๋ฐฉ์์ ๋จ์
- ์ฟ ํค๋ฅผ ํฌํจํ ์์ฒญ์ด ์ธ๋ถ์ ๋
ธ์ถ๋๋๋ผ๋ ์ธ์
ID ์์ฒด๋ ์ ์๋ฏธํ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ง ์์
๊ทธ๋ฌ๋, ํด์ปค๊ฐ ์ธ์
ID ์์ฒด๋ฅผ ํ์ทจํ์ฌ ํด๋ผ์ด์ธํธ์ธ์ฒ ์์ฅํ ์ ์๋ค๋ ํ๊ณ๊ฐ ์กด์ฌ (์ด๋ ์๋ฒ์์ IP ํน์ ์ ํตํด ํด๊ฒฐํ ์ ์๊ธดํจ)
- ์ ์ ์ ๋ณด๊ฐ ์๋ฒ์ ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋์ ๋ํ ๋น์ฉ ๋ฐ์์ด ๋จ
- ์๋ฒ์์ ์ธ์
์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋ฒ์ ๋ถํ๊ฐ ์ฌํด์ง๊ณ ์๋ฒ ๋น์ฉ์ด ๋ ๋ง์ด ๋ฌ