Cookie ๋ณด์ ์ ์ฑ
๐ฌ Intro
์ฟ ํค ๋ณด์ ์ ์ฑ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
โ SameSite
Samesite
์ ์ฟ ํค๊ฐ ๋์ผ ๋๋ฉ์ธ(same-site) ์์ฒญ์์๋ง ์ ์ก๋ ์ง, ์๋๋ฉด ๋ค๋ฅธ ๋๋ฉ์ธ ๊ฐ ์์ฒญ์์๋ ์ ์ก๋ ์ง ์ค์ ํ๋ ์์ฑ์
๋๋ค. Public Suffix
+ ํ ๋จ๊ณ ํ์ ๋๋ฉ์ธ์ด ๊ฐ๋ค๋ฉด, ๋์ผ ๋๋ฉ์ธ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
Public Suffix
๋ .com
.net
.org
๋ฑ TLD(Top-Level-Domain)์ ํฌํจํ๊ณ github.io
๊ฐ์ 2์ฐจ ๋๋ฉ์ธ๊น์ง ํฌํจ๋ ์ ์์ต๋๋ค.
๋๋ฉ์ธ ์์
example.com
/sub.example.com
- ๋ ๋๋ฉ์ธ์ด ๋ชจ๋
example.com
์ ํฌํจํ๋ฏ๋ก ๋์ผ ๋๋ฉ์ธ
- ๋ ๋๋ฉ์ธ์ด ๋ชจ๋
service.co.uk
/app.service.co.uk
- ๋ ๋๋ฉ์ธ์ด
service.co.uk
๋ฅผ ๊ณต์ ํ๋ฏ๋ก ๋์ผ ๋๋ฉ์ธ
- ๋ ๋๋ฉ์ธ์ด
example.com
/example.net
- ์๋ก ๋ค๋ฅธ TLD (
.com
๊ณผ.net
)๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ค๋ฅธ ๋๋ฉ์ธ
- ์๋ก ๋ค๋ฅธ TLD (
service.co.kr
/service.co.uk
- ์๋ก ๋ค๋ฅธ 2์ฐจ ๋๋ฉ์ธ(
.co.kr
๊ณผ.co.uk
)์ ์ฌ์ฉํ๋ฏ๋ก ๋ค๋ฅธ ๋๋ฉ์ธ
- ์๋ก ๋ค๋ฅธ 2์ฐจ ๋๋ฉ์ธ(
SameSite = โStrictโ
๊ฐ์ ๋๋ฉ์ธ์์๋ง ์ฟ ํค๊ฐ ์ ์ก๋ฉ๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ์์ ํด๋น ์ฌ์ดํธ๋ก ๋ฆฌ๋๋ ์ ๋๊ฑฐ๋ ๋งํฌ๋ฅผ ํด๋ฆญํ๋๋ผ๋ ์ฟ ํค๋ ์ ์ก๋์ง ์์ต๋๋ค. ์ด๋ CSRF์ ๊ฐ์ ๋ณด์ ์ํ์ ์์ ํ ์ฐจ๋จํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค.
SameSite = โLaxโ
๋ค๋ฅธ ๋๋ฉ์ธ๋ ๊ฐ๋ฅํ์ง๋ง GET ์์ฒญ ๋๋ ํ์ดํผ๋งํฌ๋ฅผ ํตํด์๋ง ์ฟ ํค๊ฐ ์ ์ก๋ฉ๋๋ค. GET ์์ฒญ์ ๊ฒฝ์ฐ ์๋ฒ์์์ ๋ฐ๊พธ์ง์๋ ๋ฉฑ๋ฑ์ฑ ๋๋ฌธ์ ์์ ํ๋ค๊ณ ํ๋จํ์ฌ ์ฟ ํค ์ ์ก์ ํ์ฉํ๋๊ฒ์ด๊ณ , ํ์ดํผ๋งํฌ๋ ๋ฌด์กฐ๊ฑด GET์์ฒญ๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํ์ฉํ๋๊ฒ ์ ๋๋ค.
SameSite = โNoneโ
๋ชจ๋ ๋๋ฉ์ธ ๊ฐ ์ฟ ํค ์ ์ก์ ํ์ฉํ๋ ์ค์ ์
๋๋ค. ์ฆ, ๋ค๋ฅธ ๋๋ฉ์ธ์์ ์จ ๋ชจ๋ ์์ฒญ์ ๋ํด ์ฟ ํค๊ฐ ์ ์ก๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฟ ํค์ Secure=true
์์ฑ์ด ๋ฐ๋์ ์ค์ ๋์ด์ผ๋ง ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ HTTPS ์ฐ๊ฒฐ์์๋ง ์ ์ก ๊ฐ๋ฅํฉ๋๋ค.
โ Secure
Secure = false
๋๋ฉ์ธ๊ฐ HTTP, HTTPS ์๊ด์์ด ์ฟ ํค๊ฐ ์ ์ก ๋ฉ๋๋ค.
Secure = true
๋๋ฉ์ธ๊ฐ HTTPS์ธ ๊ฒฝ์ฐ์๋ง ์ฟ ํค๊ฐ ์ ์ก ๋ฉ๋๋ค.
โ localhost์ IP์ฃผ์์ ๋ํ ์ฟ ํค ๋ณด์ ์ ์ฑ
localhost
์ IP ์ฃผ์์ ๊ฒฝ์ฐ๋ ๋ณด์์ ์ฑ
์ด ๋์จํด์ง ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๊ฐ localhost
์ ๋ํด HTTPS๊ฐ ์๋ HTTP์์๋ ๋ณด์ ๊ธฐ๋ฅ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ณดํต HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ง๋ง, localhost์์๋ ๋ง์ ๋ณด์ ๊ธฐ๋ฅ์ด ์๋ํ๋๋ฐ, ์ด๊ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ localhost
๋ฅผ ์์ ํ ํ๊ฒฝ์ผ๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฅผ ๋ค์ด Secure = true
์ธ ์ฟ ํค๋ http localhost์์ ๋ฐ์ ์ ์๊ณ , SameSite = strict
์ฌ๋ localhost์์ ์ฟ ํค๋ฅผ ์ ์ก ๋ฐ์ ์ ์์ต๋๋ค.
์์
ํด๋ผ์ด์ธํธ(http://localhost:5173) ์์ ์์
๋ก๊ทธ์ธ ์๋ฃ ์ ์ฟ ํค๋ฅผ ๋ฐ๋ ์ํฉ์
๋๋ค. ์ด๋ ๋ฆฌ๋ค์ด๋ ํธ uri ๋ฅผ http://#.##.###.##:8080/login/oauth2/code/kakao
์ฒ๋ผ ์๋ฒ ์์ฒด ip๋ก ์ค์ ํ ๊ฒฝ์ฐ์ https://forecast-test.shop/login/oauth2/code/kakao
์ฒ๋ผ DNS๋ก ์ค์ ํ ๊ฒฝ์ฐ ์ฟ ํค๊ฐ ์ด๋๋ก ์ ์ก๋๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
http://#.##.###.##:8080/login/oauth2/code/kakao
- domain ์ค์ x, samesite = lax, secure = false: #.##.###.## ์ฃผ์์ jwt ํ ํฐ ์ฟ ํค ์ ์ฅ
- domain ์ค์ x, samesite = none, secure = true: #.##.###.## ์ฃผ์์ jwt ํ ํฐ ์ฟ ํค ์ ์ฅ
https://forecast-test.shop/login/oauth2/code/kakao
- domain ์ค์ x, samesite = lax, secure = false: http localhost์ jwt ํ ํฐ ์ฟ ํค ์ ์ฅ
- domain ์ค์ x, samesite = lax, secure = true: http localhost์ jwt ํ ํฐ ์ฟ ํค ์ ์ฅ
- domain ์ค์ x, samesite = none, secure = true: http localhost์ jwt ํ ํฐ ์ฟ ํค ์ ์ฅ
์ด ์ฒ๋ผ ๋ฆฌ๋ค์ด๋ ํธ uri ๊ฐ ๋ช ์์ ์ธ ip ์ธ ๊ฒฝ์ฐ์ dns์ธ ๊ฒฝ์ฐ ์ฟ ํค๊ฐ ์ ์ก๋๋ ๊ณณ์ด ๊ฐ๊ฐ ๋ค๋ฅธ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฟ ํค์ domain ์ค์ ์ ํ์ง ์๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ๋๋ฉ์ธ์ ์ฟ ํค๋ฅผ ์ ์กํ๊ฒ ๋ฉ๋๋ค.
- ์ด๋ ๋ง์ฝ ๋๋ฉ์ธ์ด ๋ช ์์ ip์ฃผ์๋ผ๋ฉด ํด๋น ip์ฃผ์ ๋๋ฉ์ธ์ ์ฟ ํค๊ฐ ์ ์ก๋๊ณ , ๋๋ฉ์ธ์ด dns๋ผ๋ฉด ์์ฒญ์ ๋ณด๋ธ ํด๋ผ์ด์ธํธ์ localhost์ ์ฟ ํค๊ฐ ์ ์ก๋๊ฒ ๋ฉ๋๋ค.
- ์ด๋ domain ์ค์ ์ด ๋์ด ์์ง ์๊ณ ์์ฒญ์ด ํด๋ผ์ด์ธํธ localhost๋ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ก์ปฌ ํ๊ฒฝ์์ ๊ฐ๋ฐ์๊ฐ ์ฝ๊ฒ ์์ ํ ์ ์๋๋ก ๋ธ๋ผ์ฐ์ ๋ณด์์ ์ฑ ์ ์ํํ๊ฒ ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ dns ๋๋ฉ์ธ์์๋ ์ฟ ํค๊ฐ ์๋๋ ํด๋น ๋๋ฉ์ธ์ ์ ์ฅ๋์ด์ผ ํ์ง๋ง, ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋์จํ ๋ณด์ ์ ์ฑ ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ localhost๋ก ์ฟ ํค๊ฐ ์ ์ก๋๊ฒ ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์ค์ ๋ฐฐํฌ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋๋ฉ์ธ์ด ๋ค๋ฅผ๊ฒฝ์ฐ ๋ฐ๋์ ์๋ฒ์ชฝ์์ ์ฟ ํค๋ฅผ ์์ฑํ ๋ domain ์ค์ ์ ํด๋ผ์ด์ธํธ ๋๋ฉ์ธ์ผ๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค.
โจ Summary
SameSite
- Strict
- ๋์ผํ ๋๋ฉ์ธ์์๋ง ์ฟ ํค ์ ์ก
- CSRF ๋ฐฉ์ด์ ํจ๊ณผ์
- Lax
- ๋ค๋ฅธ ๋๋ฉ์ธ์์๋ ์ฟ ํค ์ ์ก ๊ฐ๋ฅ
- ๋จ GET์์ฒญ ๋๋ ํ์ดํผ๋งํฌ๋ฅผ ํตํด์๋ง ๊ฐ๋ฅ(ํ์ดํผ๋งํฌ๋ ๋ฌด์กฐ๊ฑด GET์์ฒญ์ด๋ฏ๋ก)
- None
- ๋ชจ๋ ๋๋ฉ์ธ๊ฐ ์ฟ ํค ์ ์ก ๊ฐ๋ฅ
- ๋จ Secure = true ๊ฐ ๊ฐ์ ๋จ
Secure
- Secure = false
- HTTP ๋ฐ HTTPS ๋ชจ๋์์ ์ฟ ํค ์ ์ก ๊ฐ๋ฅ
- Secure = true
- HTTPS ํต์ ์์๋ง ์ฟ ํค ์ ์ก
๋ก์ปฌ ํ๊ฒฝ์์์ ๋ณด์ ์ํ
- localhost์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณด์ ์ ์ฑ ์ ๋์จํ๊ฒ ์ ์ฉํจ. ์๋ฅผ ๋ค์ด, Secure = true ์ฟ ํค๋ HTTP ํ๊ฒฝ์ ํ์ฉ๋๋ฉฐ, ๋ค๋ฅธ ๋๋ฉ์ธ์ด๋๋ผ๋ SameSite = strict ์์๋ ์ฟ ๊ธฐ๊ฐ ์ ์ก ๋ ์ ์์
- ๋ก์ปฌ ํ๊ฒฝ์์๋ ์ฟ ํค ์ ์ฅ์ด ๊ธฐ๋ณธ์ ์ผ๋ก localhost์ ์ด๋ฃจ์ด์ง ์ ์์. ๋๋ฉ์ธ์ด ๋ช ์๋์ง ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฟ ํค ์ ์ฅ ์์น๋ฅผ localhost๋ก ์ฒ๋ฆฌํ ์ ์์
์์ ๋ก๊ทธ์ธ ๋ฆฌ๋ค์ด๋ ํธ URI์ ๋ฐ๋ฅธ ์ฟ ํค ์ ์ฅ ์์น
- IP ๊ธฐ๋ฐ ๋ฆฌ๋ค์ด๋ ํธ URI์ ํด๋น IP ์ฃผ์ ๋๋ฉ์ธ์ ์ ์ฅ๋จ
- DNS ๊ธฐ๋ฐ ๋ฆฌ๋ค์ด๋ ํธ URI๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ฟ ํค๊ฐ localhost์ ์ ์ฅ๋ ์ ์์. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ๋ฐ ํธ์๋ฅผ ์ํด ๋ณด์ ์ ์ฑ ์ ์ํํ ๊ฒฐ๊ณผ
๋๋ฉ์ธ ์ค์ ์ ์ค์์ฑ
- ์ค์ ๋ฐฐํฌ ํ๊ฒฝ์์๋ ์๋ฒ์์ ์ฟ ํค๋ฅผ ์์ฑํ ๋ ๋ฐ๋์ ๋๋ฉ์ธ ์ค์ ์ ๋ช ํํ ํด์ผ ํจ. ๋๋ฉ์ธ์ ๋ช ์ํ์ง ์์ผ๋ฉด ์ฟ ํค๊ฐ ์ ์ก์ด ์๋ ์ ์์