๐ค๋ฐฐ์ ์์ฝํ๊ธฐ
์ฟ ํค์ ๊ฐ์ฅ ํฐ ํน์ง์ด ๋ฌด์์ธ๊ฐ์?
์ฟ ํค๋ ์ง์ ํ ์๋ฒ์ ๋ํด์๋ ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ๋ณด๋ฅผ ์๋์ผ๋ก ํฌํจํ๋ ์ ์ด ๊ฐ์ฅ ํฐ ํน์ง์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
โ๏ธ ์ฟ ํค
- Set-Cookie : ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ฟ ํค๋ฅผ ์ ๋ฌ (์๋ต)
- Cookie : ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌํ๋ค.
์ฐธ๊ณ ๋ก HTTP๋ ๋ฌด์ํ(stateless) ํ๋กํ ์ฝ์ด๋ผ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ด ๋์ด์ ธ์ ์๋ก ์ํ๋ฅผ ์ ์งํ์ง ์๋๋ค๋ ํน์ง์ด ์๋ค.
์ด๊ฒ์ ์ํ ๋์์ผ๋ก ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํด์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด ์๋ค.
=> ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ํฌํจ๋๋๋ก ๊ฐ๋ฐํด์ผํด์ ๊ฐ๋ฐ์๊ฐ ํ๋ค๊ณ , ๋ณด์์๋ ๋ฌธ์ ๊ฐ ์๊ณ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ์๋ค.
์ฌ๊ธฐ์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด?
์๋ฒ์์ Set-Cookie ํค๋์ ์ค ๋ฐ์ดํฐ๋ฅผ ์ฟ ํค ์ ์ฅ์์ ์ ์ฅ์ ํด๋๋ค. ์ด ํ ๊ทธ ์ฌ์ดํธ์ ๊ฐ๋๋ง๋ค ์ฟ ํค ๊ฐ์ ๊บผ๋ด์ Cookie ํค๋๋ฅผ ๋ง๋ค์ด์ ์๋ฒ์ ๋ณด๋ด์ค๋ค.
์ฟ ํค๋ ์ง์ ํ ์๋ฒ์ ๋ํด์๋ ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ๋ณด๋ฅผ ์๋์ผ๋ก ํฌํจํ๋ค.
โญ๏ธ๋ชจ๋ ๊ณณ์ ์ด๋ฐ ์ฟ ํค ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค๋ฉด ๋ณด์์ ์์ข๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ ์ฝํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค!!โญ๏ธ
์๋ฒ์์ ์ฟ ํค๋ฅผ ์ธํ ํ ๋
ex) set-cookie : seesionId=avcde1234; expires=Sat, 14-Jan-2023 ~~; path=/; domain=.google.com;Secure
โ๏ธ์ฟ ํค์ ์ฃผ ์ฌ์ฉ์ฒ
1. ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ธ์ ๊ด๋ฆฌํ ๋ ๋ง์ด ์ด๋ค. ๊ทผ๋ฐ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋๊ฒ ์ํํ๋๊น ์๋ฒ์์ session key๋ผ๋ ๊ฒ์ ๋ง๋ค์ด์ ์๋ฒ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ์ ํด๋๊ณ , session id๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ฐํ์ ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๋ ์์ฒญํ ๋ ๊ทธ๊ฑธ ์๋ฒ์ ์์ฒญํ ๋ ๋ณด๋ด๋๊ฑฐ๋ค.
2. ์์ฆ์๋ ๊ด๊ณ ์ ๋ณด๋ฅผ ํธ๋ํนํ ๋๋ ๋ง์ด ์ด๋ค.
์ฟ ํค ์ ๋ณด๋ ํญ์ ์๋ฒ์ ์ ์ก๋์ ๋คํธ์ํฌ ํธ๋ํฝ์ด ์ถ๊ฐ ์ ๋ฐ๋๋ค๋ ๋จ์ ์ด ์๋ค. ๊ทธ๋์ ์ต์ํ์ ์ ๋ณด๋ง ์ฌ์ฉํด์ผํ๋ค. ์๋ฅผ๋ค๋ฉด ๋ก๊ทธ์ธ์ ์ธ์ id๋ oauth์ ์ธ์ฆ ํ ํฐ!
์ฟ ํค์ฒ๋ผ ์๋ฒ์ ์์ฒญํ ๋๋ง๋ค ๋ณด๋ด๋๊ฒ ์๋๊ณ ํด๋ผ์ด์ธํธ์์ ๋ณด๊ดํ๊ณ ํ์ํ ๋๋ง ์๋ฒ์ ์ ์กํ๊ณ ์ถ๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ์ผ๋ฉด ์น ์คํ ๋ฆฌ์ง ํ์ฉํ๊ธฐ!!
์ฃผ์!
์ฟ ํค๋ ์น ์คํ ๋ฆฌ์ง๋ ๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ์ ์ฅํ๋ฉด ์๋๋ค!!
โ๏ธ์ฟ ํค์ ์๋ช ์ฃผ๊ธฐ (Expires, max-age)
Set-Cookie: expires=Sat,14-Jan-2023 ~~ GMT
=> ๋ง๋ฃ์ผ์ด ๋๋ฉด ์ฟ ํค๊ฐ ์๋์ผ๋ก ์ญ์ ๋๋ค.
Set-Cookie: max-age=3600 (3600์ด) ์ด ๋จ์๋ก ์ค์ ๊ฐ๋ฅ!
=> 0์ด๋ ์์๋ฅผ ์ง์ ํ๋ฉด ์ฟ ํค๊ฐ ์ญ์ ๋๋ค.
์ธ์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ์๊น์ง๋ง ์ ์ง๋๋ค.
์์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋น ๋ ์ง๊น์ง ์ ์ง๋๋ค.
์๋ฅผ ๋ค์ด์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ค๊ฐ ๋ค์ ์ด๋ฉด ๋ก๊ทธ์ธ์ ๋ค์ ํด์ผํ๋ค๋ฉด ์ธ์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
โ๏ธ์ฟ ํค์ ๋๋ฉ์ธ ์ค์ (domain)
๋ด๊ฐ ๋ค์ด๊ฐ ์ฌ์ดํธ๋ง๋ค ์ฟ ํค๊ฐ ์์ฑ๋๋ฉด NO!!
ex)domain=example.org
โถ๋๋ฉ์ธ์ ๋ช ์ํ๋ฉด => ๋ช ์ํ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ๊ณผ ์๋ธ ๋๋ฉ์ธ์ ํฌํจํด์ ๋ชจ๋ ์ ์กํ๋ค.
domain=example.org๋ฅผ ์ง์ ํด์ ์ฟ ํค๋ฅผ ์์ฑํ๋ฉด example.org๋ ๊ธฐ๋ณธ์ด๊ณ dev.example.org๋ ์ฟ ํค๊ฐ ์ ์ก๋๋ค. (์ฟ ํค ์ ๊ทผ)
โถ๋๋ฉ์ธ์ ์๋ตํ๋ฉด => ํ์ฌ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ๋ง ์ ์ฉ๋๋ค.
example.org์์๋ง ์ฟ ํค ์ ๊ทผํ๊ณ dev.example.org๋ ์ฟ ํค ๋ฏธ์ ๊ทผ!
โ๏ธ์ฟ ํค์ ๊ฒฝ๋ก ์ค์ (Path)
ex) path=/home
์ด ๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง๋ง ์ฟ ํค ์ ๊ทผํ๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ path=/ ๋ฃจํธ๋ก ์ง์ ํ๋ค. (์ผ๋ฐ์ ์ผ๋ก ํ ๋๋ฉ์ธ ์์์ ์ฟ ํค๋ฅผ ๋ค ์ ์กํ๊ธฐ๋ฅผ ์ํ๋๊น!)
โ๏ธ์ฟ ํค์ ๋ณด์ (Secure, HttpOnly, SameSite)
โถSecure
์ฟ ํค๋ http, https๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์กํ๋๋ฐ, Secure๋ฅผ ์ ์ฉํ๋ฉด https์ธ ๊ฒฝ์ฐ๋ง ์ ์กํ๋ค.
โถHttpOnly
XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค.
HttpOnly ์ค์ ์ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ทผ ๋ถ๊ฐ!! (document.cookie)
๊ทธ๋ฆฌ๊ณ HTTP ์ ์ก์๋ง ์ฌ์ฉํ ์ ์๋ค.
โถSameSite
XSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค.
์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ง ์ฟ ํค๋ฅผ ์ ์กํ๋ค.
๋ธ๋ผ์ฐ์ ์์ ์ด๋์ ๋๊น์ง ์ง์ํ๋์ง ํ์ธํด๋ณด๊ธฐ!
ํ ํ๋ก์ ํธ ๋น์์ ์ฟ ํค์ JWT ํ ํฐ์ ๋ด์์ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ๋ณด๋ฅผ ์๋์ผ๋ก ํฌํจํ๋ค๋ ์ ์์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์น ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ ๋จ์์ ๊ด๋ฆฌํ์ต๋๋ค.
์ด๋ฒ์ ์ฟ ํค์ ๋ํด์ ์ฌ๋์๊ฒ ๊ณต๋ถํด๋ณด๋, ์ฟ ํค์ ๊ฒฝ๋ก ์ค์ ์ ํตํด์ ์ด๋ฅผ ์ ์ดํ ์ ์๋ค๋ ์ ์ ์๊ฒ ๋์์ต๋๋ค.
๐ ์๋ชป๋ ๊ฐ๋ ์ ๋ฌ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค. ์ ์ ์ฑ์ฅ์ ํฐ ๋์์ด ๋ฉ๋๋ค๐ค
'๐ฌComputer Science > ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ํ๋ก์ ์บ์ (0) | 2023.01.22 |
---|---|
[TIL] ์บ์ & ๊ฒ์ฆํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ (0) | 2023.01.17 |
[TIL] HTTP ์ํ์ฝ๋ โก๏ธ (0) | 2023.01.13 |
[TIL] ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก (0) | 2023.01.10 |
[TIL] HTTP ๋ฉ์๋ ์ข ๋ฅ์ ์์ฑ (0) | 2023.01.07 |