โ
1. ์ฟ ํค๋?
์ฟ ํค(Cookie)๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ด๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ๊ฐ์ ์ํ๋ฅผ ์ ์งํ๊ฑฐ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๐ง 2. ์ฟ ํค์ ๊ธฐ๋ณธ ๊ฐ๋
๐ 2.1 ์ฟ ํค์ ์ญํ
- ์ธ์
๊ด๋ฆฌ: ๋ก๊ทธ์ธ ์ ๋ณด, ์ฌ์ฉ์ ์ค์ ๋ฑ์ ์ ์ฅ.
- ๊ฐ์ธํ: ์ฌ์ฉ์์ ์ ํธ๋๋ ํ
๋ง ์ค์ ์ ์ฅ.
- ์ถ์ ๋ฐ ๋ถ์: ์ฌ์ฉ์์ ๋ฐฉ๋ฌธ ๊ธฐ๋ก, ํด๋ฆญ ํจํด ๋ฑ์ ์ถ์ .
๐ 2.2 ์ฟ ํค์ ๊ตฌ์กฐ
์ฟ ํค๋ ์ด๋ฆ(name), ๊ฐ(value), ์์ฑ(attributes)์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Set-Cookie: token=eyJhbGciOiJIUzI1NiIsIn...; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=3600
์์ฑ | ์ค๋ช
|
---|
Name | ์ฟ ํค์ ์ด๋ฆ (token ) |
Value | ์ฟ ํค์ ์ ์ฅ๋ ๊ฐ (eyJhbGciOiJIUzI1NiIsIn... ) |
Domain | ์ฟ ํค๊ฐ ์ ์ก๋ ๋๋ฉ์ธ (example.com ) |
Path | ์ฟ ํค๊ฐ ์ ์ก๋ ๊ฒฝ๋ก (/ ) |
Max-Age | ์ฟ ํค์ ์ ํจ ์๊ฐ (์ด ๋จ์, 3600 โ 1์๊ฐ) |
Expires | ์ฟ ํค ๋ง๋ฃ ๋ ์ง (Wed, 21 Oct 2024 ) |
Secure | HTTPS๋ฅผ ํตํด์๋ง ์ ์ก |
HttpOnly | JavaScript๋ก ์ ๊ทผ ๋ถ๊ฐ |
SameSite | CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง (Strict , Lax , None ) |
๐ 3. ์ฟ ํค์ ์ข
๋ฅ
โ
3.1 ์ธ์
์ฟ ํค (Session Cookie)
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ผ๋ฉด ์ฌ๋ผ์ง.
- Expires๋ Max-Age ์์ฑ์ด ์์.
- ์ฃผ๋ก ๋ก๊ทธ์ธ ์ธ์
๊ด๋ฆฌ์ ์ฌ์ฉ.
โ
3.2 ์ง์ ์ฟ ํค (Persistent Cookie)
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ ์ ์ง๋จ.
- Expires๋ Max-Age ์์ฑ์ด ์ค์ ๋จ.
- ์ฃผ๋ก ์๋ ๋ก๊ทธ์ธ, ์ฌ์ฉ์ ์ค์ ์ ์ฅ์ ์ฌ์ฉ.
โ
3.3 ๋ณด์ ์ฟ ํค (Secure Cookie)
- Secure ์์ฑ์ด ์ค์ ๋จ.
- HTTPS ํต์ ์์๋ง ์ ์ก๋จ.
โ
3.4 HttpOnly ์ฟ ํค (HttpOnly Cookie)
- JavaScript์์ ์ ๊ทผํ ์ ์์.
- XSS (Cross-Site Scripting) ๊ณต๊ฒฉ ๋ฐฉ์ง.
๐ก๏ธ 4. ์ฟ ํค์ ์ฃผ์ ์์ฑ
โ
4.1 Secure
- HTTPS ์ฐ๊ฒฐ์์๋ง ์ฟ ํค๊ฐ ์ ์ก๋๋ค.
- ์ค๊ฐ์ ๊ณต๊ฒฉ (Man-in-the-Middle, MITM) ๋ฐฉ์ง.
โ
4.2 HttpOnly
- JavaScript๋ฅผ ํตํด ์ฟ ํค์ ์ ๊ทผํ ์ ์๋ค.
- XSS (Cross-Site Scripting) ๊ณต๊ฒฉ ๋ฐฉ์ง.
โ
4.3 SameSite
- CSRF (Cross-Site Request Forgery) ๊ณต๊ฒฉ ๋ฐฉ์ง.
- ์ต์
:
Strict
: ๋์ผ ์ฌ์ดํธ ๋ด ์์ฒญ๋ง ์ฟ ํค ์ ์ก.
Lax
: ๋์ผ ์ฌ์ดํธ + ๋งํฌ ํด๋ฆญ ์ ์ฟ ํค ์ ์ก.
None
: ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ์ก (๋ฐ๋์ Secure
ํ์).
๐ 5. ์ฟ ํค์ ๋์ ๋ฐฉ์
โ
5.1 ์ฟ ํค ์ค์ (Set-Cookie)
์๋ฒ๊ฐ ์ฟ ํค๋ฅผ ์ค์ ํ ๋ ๋ธ๋ผ์ฐ์ ์ Set-Cookie
ํค๋๋ฅผ ๋ณด๋ธ๋ค.
์์ (์๋ฒ โ ํด๋ผ์ด์ธํธ):
HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; HttpOnly; Secure; Path=/; Max-Age=3600
โ
5.2 ์ฟ ํค ์ ์ก
- ๋ธ๋ผ์ฐ์ ๋ ๊ฐ์ ๋๋ฉ์ธ/๊ฒฝ๋ก๋ก ์์ฒญ์ ๋ณด๋ผ ๋ ์๋์ผ๋ก ์ฟ ํค๋ฅผ ํฌํจํ๋ค.
์์ (ํด๋ผ์ด์ธํธ โ ์๋ฒ):
GET /dashboard
Cookie: sessionId=abc123
๐ 6. ์ฟ ํค์ JWT (JSON Web Token)
โ
6.1 JWT๋ฅผ ์ฟ ํค์ ์ ์ฅํ ๋์ ์ฅ๋จ์
๊ตฌ๋ถ | ๋ก์ปฌ ์คํ ๋ฆฌ์ง (LocalStorage) | HttpOnly Secure ์ฟ ํค |
---|
XSS ๊ณต๊ฒฉ | ์ทจ์ฝ | ์์ |
CSRF ๊ณต๊ฒฉ | ์์ | SameSite ๋ก ๋ฐฉ์ด |
๋ธ๋ผ์ฐ์ ์ ๊ทผ | JavaScript ์ ๊ทผ ๊ฐ๋ฅ | JavaScript ์ ๊ทผ ๋ถ๊ฐ |
๋ณด์ ์์ค | ๋ฎ์ | ๋์ |
์ ์ก ๋ฐฉ์ | ์๋์ผ๋ก ํค๋์ ์ถ๊ฐ ํ์ | ์๋์ผ๋ก ์ ์ก |
โ
6.2 ์ฟ ํค vs ์ธ์
๊ตฌ๋ถ | ์ฟ ํค (Cookie) | ์ธ์
(Session) |
---|
์ ์ฅ ์์น | ๋ธ๋ผ์ฐ์ | ์๋ฒ |
๋ณด์ | ๋ณด์ ์ทจ์ฝ์ ์กด์ฌ | ์๋์ ์ผ๋ก ์์ |
์๋ | ๋น ๋ฆ | ๋๋ฆผ |
์ ํจ์ฑ | ์ ํจ ์๊ฐ ์ค์ ๊ฐ๋ฅ | ๋ธ๋ผ์ฐ์ ์ข
๋ฃ ์ ๋ง๋ฃ |
๐ง 7. ์ฟ ํค์ ๋ณด์ ์ทจ์ฝ์
โ ๏ธ 7.1 XSS (Cross-Site Scripting)
- JavaScript๋ฅผ ํตํด ์ฟ ํค ์ ๊ทผ โ ํ์ทจ.
์๋ฐฉ:
โ ๏ธ 7.2 CSRF (Cross-Site Request Forgery)
- ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ์
์ฑ ์์ฒญ ์ ์ก.
์๋ฐฉ:
โ ๏ธ 7.3 ์ค๊ฐ์ ๊ณต๊ฒฉ (MITM)
- HTTP ํต์ ์์ ์ฟ ํค๊ฐ ๋
ธ์ถ.
์๋ฐฉ:
Secure
์์ฑ ์ฌ์ฉ.
- HTTPS ์ฌ์ฉ ํ์.
๐ 8. ์ฟ ํค ์ฌ์ฉ Best Practice
- JWT๋ HttpOnly, Secure ์ฟ ํค์ ์ ์ฅ.
- SameSite=Strict๋ก CSRF ๋ฐฉ์ง.
- HTTPS ๊ฐ์ ์ฌ์ฉ.
- ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ฟ ํค์ ์ ์ฅ ๊ธ์ง.
- ์ ํจ ์๊ฐ(
Max-Age
)์ ์ต์ํ.
๐ฏ 9. ๊ฒฐ๋ก
- HttpOnly + Secure + SameSite ์ค์ ์ ํ์!
- ์ฟ ํค๋ ์น ๋ณด์์ ์ํด ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ฟ ํค์ ์ ์ฅํ์ง ๋ง๊ณ , ํ ํฐ์ HttpOnly Secure ์ฟ ํค๋ฅผ ์ฌ์ฉํ์.
๐ 10. ์ถ๊ฐ ํ์ต