๐ ์น ๋ธ๋ผ์ฐ์ ์ Cookie ํค๋ ๋ค๋ฃจ๊ธฐ
์น ๋ธ๋ผ์ฐ์ ์ Cookie ๋?
์น๋ธ๋ผ์ฐ์ ์์ ์ฟ ํค(Cookie)๋ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์กํ๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ผ๋ก, key=value ํ์์ ๋ฌธ์์ด ๋ฐ์ดํฐ ๋ฌถ์์ด๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด ๋ฌธ์์ด ๋ฐ์ดํฐ ์กฐ๊ฐ๋ค์ ์ ์ฅํด๋์๋ค๊ฐ ๋์ผํ ์๋ฒ์ ์ฌ ์์ฒญ์ ์ฟ ํค ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ์ ์ผ๋ก Stateless ํ ์์ฑ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฐ๊ฒฐ ์ ์ง๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์๋ก๋ฅผ ์ธ์ํ ์ ์๋ ์๋ณ d๋ฐ์ดํฐ๊ฐ ํ์ํด์ก๊ณ ๊ทธ๊ฒ์ด ์ฟ ํค ๋ฐ์ดํฐ ์กฐ๊ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์ฟ ํค์ ์ด์์ 1994๋ , ๋ท์ค์ผ์ดํ ๊ฐ๋ฐ์ ๋ฃจ์ด J. ๋ชฌํด๋ฆฌ(Louis J. Montulli)๊ฐ ๊ณ ์ํ๋๋ฐ, ์ ๋์ค ํ๋ก๊ทธ๋๋จธ๋ค์ด ํ๋ก๊ทธ๋จ ์์ ํ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ฐํํ๋ ๋ฐ์ดํฐ์ ํจํท์ '๋งค์ง ์ฟ ํค'๋ผ๊ณ ๋ถ๋ฅด๋ ๋ฐ์ ์ฐฉ์ํ๋ค.
์ฟ ํค์ ํ์ฉ๋
์ฟ ํค๋ ์๋ฒ์์ ์ํธ์์ฉ ๋ฟ๋ง ์๋๋ผ, ์น์ฌ์ดํธ์ ํ๊ฒฝ ์ค์ ์ด๋ ๊ฒ์ ๊ธฐ๋ก์ ์ ์งํ์ฌ ์ด์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ ๋ ์ฌ์ฉ ๊ฒฝํ์ ์ ๊ณตํด ์ฃผ๊ธฐ๋ ํ๋ค. ์ฟ ํค์ ์ฃผ ์ฌ์ฉ ๋ชฉ์ ์ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์ธ์ ๊ด๋ฆฌ(Session Management) : ์๋ฒ ๊ฐ ์ผ์์ ์ธ ์ฐ๊ฒฐ ์ ์ง์ ์ด์ฉ (๋ก๊ทธ์ธ)
- ๊ฐ์ธํ(Personalization) : ์น์ฌ์ดํธ์ ๋ํ ์ฌ์ฉ์ ์ ํธ, ํ ๋ง ๋ฑ์ ์ธํ
- ํธ๋ํน(Tracking) : ์ฌ์ฉ์ ํ๋์ ๊ธฐ๋กํ๊ณ ๋ถ์ํ๋ ์ฉ๋ (๊ด๊ณ )
์ด์ฒ๋ผ ์ฟ ํค๋ ํ์ฉ๋๊ฐ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ๋ช ํํ ํ๊ณ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์ ๋ณด๊ฐ ํด๋ผ์ด์ธํธ ์ธก์์ ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ ์ฉ๋ ์ฐ๋ ค๊ฐ ์๊ณ , ๋ณด์์ ์ทจ์ฝํ์ฌ ์ ๋ณด๊ฐ ํ์ทจ๋นํ ์ํ์ฑ์ด ์กด์ฌํ๋ค๋ ์ ์ด๋ค. ๊ทธ๋์ ๋ณด์์ ๋ฏผ๊ฐํ ๋น๋ฐ๋ฒํธ๋ ์ฃผ๋ฏผ๋ฒํธ์ ๊ฐ์ ์ ๋ณด๋ ์ฌ์ฉํ๋ฉด ์๋๊ณ ์ต์ํ์ ์ ๋ณด๋ง ์ฌ์ฉํด์ผ ํ๋ค.
ํนํ๋ ์์ฆ์๋ ์ฟ ํค๊ฐ ํธ๋ํน์ผ๋ก ๊ณผ๋ํ๊ฒ ์ด์ฉ๋์ด ๊ณผํ ๊ด๊ณ ์๋จ์ผ๋ก ๋จ์ฉ๋๋ฉด์, ์ด๋ฅผ ๊ท์ ํ๋ ๋ฐ๊ฑธ์์ด ํ๋ฐํด์ง๊ณ ์๋ค. ๊ทธ์ค ํ๋๊ฐ ๋ฐ๋ก GDPR ๊ฐ์ธ์ ๋ณด๋ณดํธ ๋ฒ๋ น์ธ๋ฐ, ์ด๋ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ๊ฑฐ์ ๋๋ถ๋ถ ์๋์ ๊ฐ์ ์ฟ ํค ์์ง์ ๋ํ ๋์๋ฅผ ์๊ตฌํ๋ ์ฐฝ์ ๋ด์์ ๊ฒ์ด๋ค.
์ฌ์ฉ์๋ก๋ถํฐ ์ด๋ฌํ ์ฟ ํค ํ์ฉ์ ๋ฐ์์ผ ํ๋ ์ด์ ๋ ์ฟ ํค์ ๋๋ ๋ชจ๋ฅด๊ฒ ๋ค์ด๊ฐ ๊ฐ์ธ ์ ๋ณด๋ฅผ ํ ์ฌ์ดํธ์์ ํจ๋ถ๋ก ๋จ์ฉํ์ง ๋ง๋ผ๋ ์ทจ์ง์์์ด๋ค.
์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ด๋ฆฌ
ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ ์ ์ ์ผ๋ก ์น๋ธ๋ผ์ฐ์ ๊ฐ ๊ด๋ฆฌํ๋ค.
์ฆ, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ , ์ฃ์ง ๋ธ๋ผ์ฐ์ , ํ์ด์ดํญ์ค ์ ๊ฐ์ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ๋ก ๋์ผํ ์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด ๋๊ฐ์ ๋ด์ฉ์ ์ฟ ํค๊ฐ์ ์ ์ฅํ๋ค ํ๋๋ผ๋ ์ด ์ฟ ํค๋ค์ ์๋ก ๋ณ๊ฐ์ด๋ค. ์ฆ, ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์ข ์๋์ด์๋ค.
๋ค์์ HTTP ์ฟ ํค ํค๋ ํ๋ผ๋ฏธํฐ ์น์ ์์ ์์ธํ ๋ค๋ฃจ๊ฒ ์ง๋ง, ์ฟ ํค๋ ์น์ฌ์ดํธ ๋๋ฉ์ธ์ ๋ฐ๋ผ ๋๋ ์น์ฌ์ดํธ ํ์ด์ง๊ฒฝ๋ก์ ๋ฐ๋ผ ์ ์ฅ๋๋๋ก ๊ฐ๊ธฐ ๋ค๋ฅด๊ฒ ์ง์ ํ ์ ์๋ค.
๋ง์ผ ํ์ฌ ๊ฒฝ๋ก๊ฐ example.com/page ์ธ๋ฐ ์๋ฒ์์ ์ฟ ํค๊ฐ์ test=1; path=/home ์ด๋ผ๊ณ ์๋ตํ๊ฒ ๋๋ฉด, ๋ธ๋ผ์ฐ์ ๋ /home ๊ฒฝ๋ก์ ์ฟ ํค๋ฅผ ์ ์ฌํ๊ฒ ๋์ด, ํ์ฌ ํ์ด์ง์์ test๋ผ๋ ์ฟ ํค ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ํ์ด์ง๋ฅผ home์ผ๋ก ์ด๋์ํค๊ฒ ๋๋ฉด test ์ฟ ํค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ํ ๊ฐ ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๋ฉ๋ด๋ฅผ ์ง์ํ๊ธฐ๋ ํ๋๋ฐ, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์๋์ ๊ฐ์ ๋ณ๋์ ์ฟ ํค ๊ด๋ฆฌ ํญ์ ์ ๊ณตํ๊ธฐ๋ ํ๋ค. (F12 → ์๋จ์ Applicationํญ ํด๋ฆญ → ์ข์ธก ์ฌ์ด๋๋ฐ์ Cookies ํญ ํด๋ฆญ)
์ฟ ํค์ ํ๋ฆ (๋ก๊ทธ์ธ ๊ณผ์ )
์ฟ ํค๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ ๊ณผ์ ์ ๊ฑฐ์ณ์ง๋์ง ๊ฐ๋จํ๊ฒ ์ดํด๋ณด์. ๋ค์์ ์ธ์ ์ฟ ํค๋ฅผ ๋ง๋๋ ๊ณผ์ ์ด๋ค.
- ๋ก๊ทธ์ธ(/login) ํ๋ฉด์์ ํด๋ผ์ด์ธํธ๊ฐ username ๊ณผ password๋ฅผ ์ ๋ ฅํ๊ณ ์๋ฒ์ ์ ์ถ(์์ฒญ) ํ๋ค.
- ์๋ฒ๋ DB๋ฅผ ์กฐํํ์ฌ ํด๋น ์ ์ ์ ๋ณด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๊ฒ์ฆํ๊ณ ์ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ ์ธ์ ์์ด๋(SessionID)๋ฅผ ์ฟ ํค๋ก ๋ง๋ค์ด ๋ฐํํ๋ค. (Set-Cookie)
- ํด๋ผ์ด์ธํธ๋ ์๋ต ๋ฐ์ ์ฟ ํค๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํด ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ๋์๋ณด๋ ์ฐฝ(/dashboard)์ ์ง์ ํ๊ธฐ ์ํด์ ์๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋ผ๋ ์ฟ ํค๋ฅผ ๊ฐ์ด ์ค์ด ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์จ ์ฟ ํค์ ๋ค์ ์ธ์ ์์ด๋๋ฅผ ํ์ฑํ์ฌ ์ฌ๋ฐ๋ฅธ์ง ๊ฒ์ฆํ๊ณ , ๋ก๊ทธ์ธํ ํ์์ด๋ฉด ๊ทธ์ ๊ฑธ๋ง๋ ๋์๋ณด๋ ํ์ด์ง๋ฅผ ์๋ตํ๋ค.
์๋ฒ์์ ๊ฐ์ธ ํ์ ์ ๋ณด์ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๋ฉด, ๋ค๋ฅธ ์ฌ๋๋ ์ผ๋ง๋ ์ง ๋ณผ์ ์๋ค๋ ์ํ์ฑ ๋๋ฌธ์, ๋ฐ๋ก ์ธ์ ํค๋ฅผ ์๋ฒ์์ ๋ง๋ค์ด์ DB์ ์ ์ฅํด๋๊ณ sessionId ๊ฐ์ผ๋ก ๋ณด๋ธ๋ค. ํด๋ผ์ด์ธํธ๋ ๊ทธ sessionId๋ฅผ ์ ์ฅํด๋๊ณ ์์ฒญํ ๋๋ง๋ค ๋ณด๋ด๊ฒ ๋๋ค.
HTTP Cookie ํค๋
Cookie (์์ฒญ ํค๋)
- HTTP ์์ฒญ ์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌํ๋ ์ฟ ํค ํค๋
- ์๋ฒ์ ์ธ์ ์ํ๋ฅผ ๋ด์ SessionID ํน์ ๊ฐ์ข ํด๋ผ์ด์ธํธ ์ ๋ณด๋ค์ ๋ด๊ณ ์๋ค.
Set-Cookie (์๋ต ํค๋)
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ๋ ์ฟ ํค ํค๋
- ํด๋ผ์ด์ธํธ๋ ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฟ ํค๋ฅผ ๋ง๋ค์ด ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ
์ฟ ํค์ ์ ์ฅ ๋ฐฉ์
- ์ฟ ํค๋
key=valueํํ๋ก ์ ์ฅ๋๋ ๋ฌธ์์ด๋ก์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝค๋ง(,)๋ก ์ด๊ฑฐํ์ฌ ์ ์ฅํด ๊ตฌ๋ถํ๋ค. - ์ฟ ํค๋ ์ ํจ ๊ธฐ๊ฐ์ด๋ ๋๋ฉ์ธ ๋ฑ์ ์ค์ ํ ํ๋ผ๋ฏธํฐ๋ค์ ์ธ๋ฏธ์ฝ๋ก (;)์ ํตํด ์ด๊ฑฐํ๋ค.
- ์ฆ, ์๋์ ๊ฐ์ ์ฟ ํค ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ ์ด 3๊ฐ์ง ํํ์ ์ฟ ํค๊ฐ์ด ์๋ ๊ฒ์ด๋ค.
- sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
- name=์ธํ; domain=inpa.tistory.com
- test=value
HTTP Cookie ํ๋ผ๋ฏธํฐ
์ฟ ํค๋ key=value ํํ๋ก ์ด๋ฃจ์ด์ง ๋จ์ํ ๋ฌธ์์ด์ด์ง๋ง, ๊ฐ ์ฟ ํค๊ฐ์ ์ ์ฉ๋๋ ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ์ด๋ ๋๋ฉ์ธ ์ค์ ๋ฑ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ถ๊ฐํ ์ ์๋ค. ์ด ํ๋ผ๋ฏธํฐ๋ค์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ ์ฉ๋๋ ์์ฑ๋ค์ด๋ฉฐ, ์๋ฒ์์ ์๋ตํ ๋ ์ค์ ํ์ฌ ์๋ต ํ ์๋ ์๋ค.
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์๋ ๋ณ๋์ ์ฟ ํค ๊ด๋ฆฌ ํญ์ ์ด์ฉํด ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ํ ์๋ ์๋ค.
ํ๋ ์์ฑ | ์ค๋ช |
NAME=VALUE | ์ฟ ํค์ ๋ถ์ฌ๋ ์ด๋ฆ๊ณผ ๊ฐ (ํ์) |
Expires=DATE | ์ฟ ํค ์ ํจ ๊ธฐํ |
Path=PATH | ์ฟ ํค ์ ์ฉ ๋์์ด ๋๋ ๋๋ ํ ๋ฆฌ |
Domain=๋๋ฉ์ธ๋ช | ์ฟ ํค ์ ์ฉ ๋์์ด ๋๋ ๋๋ฉ์ธ ๋ช |
Secure | HTTPS๋ก ํต์ ํ๋ ๊ฒฝ์ฐ์๋ง ์ฟ ํค๋ฅผ ์ก์ |
HttpOnly | ์ฟ ํค๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ก์ธ์ค ํ์ง ๋ชปํ๋๋ก ์ ํ |
SameSite | ํฌ๋ก์ค ์ฌ์ดํธ(Cross-site)๋ก ์ ์กํ๋ ์์ฒญ์ ๊ฒฝ์ฐ ์๋ ํํฐ ์ฟ ํค์ ์ ์ก์ ์ ํ |
์ฟ ํค ์๋ช ์ฃผ๊ธฐ
expires์max-age๋ฅผ ํตํด ๋ง๋ฃ์ผ์ ์ค์ ํ ์ ์๋ค.expires=Sat, 26-Dec-2020 04:39:21 GMT- ๊ตฌ์ฒด์ ์ธ ๋ ์ง๋ฅผ ๋ช ์
- ๋ง๋ฃ์ผ์ด ์ง๋๋ฉด ์ฟ ํค๋ ์ญ์ ๋๋ค.
max-age=3600- ์ฟ ํค ์ ํจ ์๊ฐ์ ๋ช ์ (์ด ๋จ์)
- ๋ง์ผ 0์ด๋ ์์๋ก ์ง์ ํ ๊ฒฝ์ฐ ์ฟ ํค๋ ์ญ์ ๋๋ค.
- ๋ง์ผ ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ์ ๊น์ง๋ง ์ ์ง๋๋ค. ์ด๋ฅผ ์ธ์ ์ฟ ํค๋ผ ๋ถ๋ฅธ๋ค.
- ๋ง๋ฃ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์ง๋๋ค. ์ด๋ฅผ ์์ ์ฟ ํค๋ผ ๋ถ๋ฅธ๋ค.
์ฟ ํค Path
- ์ฟ ํค์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ฉด, ํด๋น ํ์ด์ง ๊ฒฝ๋ก์์๋ง ์ฟ ํค ์ฌ์ฉ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ํด๋น ๊ฒฝ๋ก์ ํ์ ๊ฒฝ๋ก๊น์ง ๋ชจ๋ ํฌํจํ๋ค. ๊ทธ๋์ ๋ฃจํธ ๊ฒฝ๋ก(/) ๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ๊ฒฝ๋ก์ ์ฟ ํค๊ฐ ์ ํจํ๋ค๋ ๋ป์ด ๋๋ค.
path=/home์ง์ - /home/level1 → ์ ๊ทผ ๊ฐ๋ฅ
- /home/level1/level2 → ์ ๊ทผ ๊ฐ๋ฅ
- /hello → ์ ๊ทผ๋ถ๊ฐ๋ฅ (๋ค๋ฅธ ๊ฒฝ๋ก)
- path๋ฅผ ์ ๋ ฅํ์ง ์์ผ๋ฉด ๋ฃจํธ ๊ฒฝ๋ก๋ก ์๋ ์ ๋ ฅ ๋๋ค.
- ๋จ, ์ฟ ํค์ ๋ฒ์๋ฅผ ์ข๊ฒ ์ก์ ์๋ก ๋ณด์์๋ ์ข๋ค.
์ฟ ํค Domain
- ์ฟ ํค์ ๋๋ฉ์ธ์ ์ค์ ํ๋ฉด, ํด๋น ๋๋ฉ์ธ ํ์ด์ง์์๋ง ์ฟ ํค ์ฌ์ฉ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ํด๋น ๋๋ฉ์ธ์ ์๋ธ ๋๋ฉ์ธ๊น์ง ๋ชจ๋ ํฌํจํ๋ค.
domain=example.org์ง์ - .example.org ํํ๋ก ์ ์ฅ (๋๋ฉ์ธ ์์ ์ ์ ์๋ธ ๋๋ฉ์ธ๋ ํ์ฉํ๊ฒ ๋ค๋ ๋ป์ด๋ค)
- example.org → ์ฟ ํค ์ ๊ทผ ๊ฐ๋ฅ
- www.example.org → ์ฟ ํค ์ ๊ทผ ๊ฐ๋ฅ
- ๋๋ฉ์ธ์ ์๋ตํ๋ฉด ํ์ฌ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ์ผ๋ก๋ง ์ ์ฉ๋๋ค.
- ์ฆ, ์ ์ฌ์ง๊ณผ ๊ฐ์ด .inpa.tistory.com ์ด ์๋ ์ ์ด ์๋ต๋ inpa.tistory.com ์ผ๋ก ์ ์ฅ๋์ด ์๋ธ ๋๋ฉ์ธ์ ํ์ฉํ์ง ์๋๋ค.
- ๋ง์ผ ํ์ฌ ๋๋ฉ์ธ์์ ์ค์ ํ ์ฟ ํค๋ฅผ ํผ์คํธ ํํฐ ์ฟ ํค(First-party cokkies) ๋ผ ํ๊ณ , ๋ค๋ฅธ ๋๋ฉ์ธ์ผ๋ก ์ค์ ๋ ์ฟ ํค๋ฅผ ์๋ ํํฐ ์ฟ ํค(Third-party cokkies)๋ผ ํ๋ค.
์๋ ํํฐ ์ฟ ํค
์ฟ ํค ๋๋ฉ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ํ ๋ค๋ฅธ ๋๋ฉ์ธ์ผ๋ก ์ค์ ๋ ์ฟ ํค๋ฅผ ์๋ ํํฐ ์ฟ ํค(Third-party Cookie)๋ผ๊ณ ๋ถ๋ฆฌ์ด๋ค.
์๋ ํํฐ ์ฟ ํค๋ ๊ตฌ๊ธ ์ ๋์ผ์ค์ ๊ฐ์ ์คํฌ๋ฆฝํธ๋ง ๋ฑ๋ก๋์ด ์๋ค๋ฉด ์ฌ๋ฌ ๊ฐ์ ์ฌ์ดํธ์ ์ฟ ํค๋ฅผ ์์ฑํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ Example ์ฌ์ดํธ์ ๋ฐฉ๋ฌธํด์ ๋ก๊ทธ์ธ์ ํ๋ค๋ฉด ๋ค์ ๋ก๊ทธ์ธํ ๋ ์ ๋ณด๋ฅผ ๋ค์ ์ ๋ ฅํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ผ ์ ์๋๋ก Example ์ฌ์ดํธ์์ ์ฌ์ฉ์์ ์น๋ธ๋ผ์ฐ์ ๋ก Cookie A๊ฐ ๋ถ์ฌ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ์นํ์ด์ง๋ ์ฐ์ธก์ ๋ฐฐ๋ ๊ด๊ณ ๊ฐ ํ์๋๋๋ฐ ์ด ๋ฐฐ๋ ๊ด๊ณ ๋ Adserver ์ฌ์ดํธ์์ ์ ๋ฌ๋๊ณ ์๋ค๊ณ ํ๋ค. ์ด ๋ฐฐ๋๋ฅผ ํตํด ์ฌ์ฉ์์ ์น๋ธ๋ผ์ฐ์ ์ ๋ค๋ฅธ ๋๋ฉ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ๋ Cookie B ๊ฐ ๋ถ์ฌ๋๊ฒ ๋๋ค.
์ฆ, ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ๊ณ ์๋ ๋๋ฉ์ธ์์ ๋ฐํ๋๋ Cookie A๋ฅผ ํผ์คํธ ํํฐ ์ฟ ํค(First-party Cookie) ์ด๋ฉฐ, ํ ๋๋ฉ์ธ์์ ๋ฐํ๋๋ Cookie B๋ฅผ ์๋ ํํฐ ์ฟ ํค(Third-party Cookie)๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค.
์ด ์๋ ํํฐ ์ฟ ํค๋ ์ฃผ๋ก ํ๊น ๋ง์ผํ ๊ด๊ณ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์๋ฅผ๋ค์ด ์ ๋ฐ ์ผํ๋ชฐ ์ฌ์ดํธ๋ฅผ ์์ฃผ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ฉด ์ฟ ํค๊ฐ ์ ์ฅ๋๊ฒ ๋๊ณ ๊ตฌ๊ธ ์ ๋์ผ์ค๊ฐ ์ด๋ฅผ ๊ฐ์ ธ๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ์์์ ๋ฐฐ๋ ๊ด๊ณ ์์ ์ ๋ฐ ๊ด๊ณ ๊ฐ ํ๋ฉด์ ๋ํ๋๋ ๊ฒ์ด ์๋ ํํฐ ์ฟ ํค๋ฅผ ์ด์ฉํ ์๋ฆฌ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์ฟ ํค Secure
- ํ์ฑํํ๋ฉด, HTTPS ์ฌ์ฉ ์์๋ง ์ฟ ํค ์ ๋ณด ์ ๋ฌ
- ๋ฏธ์ ์ฉ ์์๋ HTTP, HTTPS ๊ตฌ๋ถํ์ง ์์
์ฟ ํค HttpOnly
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฟ ํค ์ฌ์ฉ ์ ๊ทผ์ ์ ํํ๋ค.
- ๊ทธ๋์ ํด์ปค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฟ ํค๋ฅผ ํ์ทจํ ์ ์์ด, XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฟ ํค ์ ๊ทผ ๋ฐฉ์ง
์ฟ ํค๋ ๊ผญ ์๋ฒ์์ ๋ง๋ค์ด ๋ฐํํ์ฌ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ ์๋๊ฒ์ด ์๋ ์ผ๋ง๋ ์ง ํด๋ผ์ด์ธํธ์์๋ ๋ง๋ค์ด ์ฌ์ฉ ํ ์ ์๋ค. ์น๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด ๋ง๋ค์๋ ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ ์ง์ ์ฟ ํค๋ฅผ ๋ง๋ค์ด ์๋ฒ์ ๋ณด๋ผ์๋ ์๋ค.
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT";
alert(document.cookie); // ๋ชจ๋ ์ฟ ํค ๋ณด์ฌ์ฃผ๊ธฐ
[JS] ๐ช ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฟ ํค(Cookie) ๋ค๋ฃจ๊ธฐ
Cookie๋? Cookie๋ ๋ฐ์ดํฐ์ด๋ฉด์, ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์ฌ์ฉํ๋ ์ปดํจํฐ์ ์์ ํ ์คํธํ์ผ๋ก ์ ์ฅ๋์ด์๋ ๊ฒ์ด๋ค. โ ์ด๋ค ์ฌ์ดํธ์ ์ ๊ทผ์ ํ๊ณ 'ํ๋ฃจ ๋์ ์ด ์ฐฝ์ ๋ณด์ง ์๊ธฐ'๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ณธ์ ์ด ์๋
inpa.tistory.com
๊ทธ๋ฐ๋ฐ ์๋์ ๊ฐ์ด ์๋ฒ๋ก๋ถํฐ test, test2, test3 ์ฟ ํค๊ฐ ์๋ต๋์๋๋ฐ, test3 ์ฟ ํค๋ง httpOnly ์์ฑ์ด ์ ์ฉ๋์ด ์๋ค๊ณ ํ๋ค.
๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฟ ํค๋ฅผ ๋์ดํ๋ ์ฝ๋ document.cookie ๋ฅผ ์คํํด๋ณด๋ฉด test3 ๋ถ๋ถ๋ง ๋น ์ง์ฑ ์ด๊ฑฐ๋จ์ ๋ณผ ์ ์๋ค.
console.log(document.cookie);
๋ง์ผ ๊ฐ๋ฐ์๋๊ตฌ์ Application ์ฟ ํค ํญ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ์ฅํ ์ฟ ํค๊ฐ ์๋ณด์ธ๋ค๋ฉด ์ฟ ํค์ domain ์์ฑ์ ๋ง์ถฐ๋ณด๊ธธ ๋ฐ๋๋ค
์ฟ ํค SameSite
- SameSite ์์ฑ์ ์๋ ํํฐ ์ฟ ํค์ ๋ณด์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ธฐ์ ์ด๋ค.
- XSRF, CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์๋ค.
- ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค ์ ๋ณด ๋ด์ ๋๋ฉ์ธ์ด ๋ค๋ฅธ ํฌ๋ก์ค ์ฌ์ดํธ(Cross-site)๋ก ์ ์กํ๋ ์์ฒญ์ ๋ํด์ ์ ํ์ ๋ ์ ์๋ค.
SameSite 3๊ฐ์ง ์์ฑ
ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก None , Lax , Strict ์ธ ๊ฐ์ง ์ข
๋ฅ๋ฅผ ์ ํํ ์ ์๊ณ , ๊ฐ๊ฐ ๋์ํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
None: ์ฟ ํค๋ ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ์ ๊ฒฝ์ฐ์๋ ํญ์ ์ ์กํ๋ค. ๋ฐ๋ผ์ ๋ณด์์ ์ผ๋ก SameSite ์ ์ฉ์ ํ์ง ์์ ์ฟ ํค์ ๋ค๋ฆ์ด ์๋ค.Strict: ์ฟ ํค๋ ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ์๋ ํญ์ ์ ์ก๋์ง ์๋๋ค. ๊ฐ์ฅ ๋ณด์์ ์ธ ์ ์ฑ .Lax: Strict์ ๋นํด ์๋์ ์ผ๋ก ๋์จํ ์์ฑ. ๋ช ๊ฐ์ง ์์ธ์ ์ธ ์์ฒญ์๋ ์ ์กํ๋๋ก ํ๋ค.
SameSite Lax ์์ธ ๊ธฐ์ค
SameSite=Lax ์ผ๋ ์ฟ ํค๊ฐ ์์ธ์ ์ผ๋ก ์ ์ก๋๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ์ฉ์๊ฐ <a> ํํฌ๋ฅผ ํด๋ฆญํด์ 302 ๋ฆฌ๋ค์ดํ
ํธ๋ฅผ ํ๊ฑฐ๋, ์๋ฐ์คํฌ๋ฆฝํธ๋ก window.location.replace ๋ฑ์ผ๋ก ์ธํด ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๋ ์ด๋์์ ์๋ ํํฐ ์ฟ ํค๊ฐ ์ ์ก๋๋ค.
ํ์ง๋ง <iframe> ํ๊ทธ๋ <img> ํ๊ทธ๋ฅผ ๋ฌธ์์ ์ฝ์
ํจ์ผ๋ก์ ๋ฐ์ํ๋ http ์์ฒญ์ ์ ์ก์ ์ ํํ๋ค. ๋ํ GET ์์ฒญ์ ๋ํด์ ์ฟ ํค๊ฐ ์ ์ก๋์ง๋ง, POST ๋ DELELTE ์์ฒญ์ ์ ํ๋๋ค.
์ฐธ๊ณ ๋ก SameSite ํ๋ผ๋ฏธํฐ์ ๋ณด์ ์์ฑ์ ์๋ ํํฐ ์ฟ ํค์ ํํ๋ ๊ฒ์ด๋ฉฐ, ํผ์คํธ ํํฐ ์ฟ ํค๋ Lax๋ Strict์ฌ๋ ์ ์ก๋๋ค.
SameSite None ์ฃผ์์
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ SameSite ๊ฐ์ผ๋ก None์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ์ฟ ํค๋ ๋ฐ๋์ Secure ๊ฐ ์ค์ ๋ ์ฟ ํค์ฌ์ผ ํ๋ค๋ ์ ์ฑ ์ด ์๋ค. ๋ง์ผ ํฌ๋กฌ์์ ์ ์ ์ฑ ์ ์งํค์ง์๊ณ ์๋ฒ์์ Set-Cookie๋ฅผ ํ๊ฒ ๋๋ฉด ์ฟ ํค ์์ฒด๊ฐ ์ ๋๋ก ์ค์ ๋์ง ์๊ฒ ๋๋ค.
# ์ฐธ๊ณ ์๋ฃ
http://taeyo.net/columns/View.aspx?SEQ=471&PSEQ=36&IDX=1
https://www.virtuesecurity.com/kb/testing-cookie-based-session-management/
https://smorning.tistory.com/236
https://market.dighty.com/contents/?q=YToxOntzOjEyOiJrZXl3b3JkX3R5cGUiO3M6MzoiYWxsIjt9&bmode=view&idx=4988279&t=board