Cookie
์ฟ ํค๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ค์ ํ๋์ด๋ค. HTTP์ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์์๋ค. ์ฆ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ณํ ์ ์๊ณ , ์ฌ์ฉ์๋ ๋งค๋ฒ ์ธ์ฆ์ ์ฐจ๋ฅผ ์งํํด์ผํ๋ค.(HTTPํ๋กํ ์ฝ์ Connectionless, Statelessํจ ๋๋ฌธ์) ํ์ง๋ง ์ฟ ํค๋ฅผ ํตํด ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ ์์๊ฒ ํ๊ณ ์ด๊ฒ์ด ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ด๋ค.
Cookie์ ์ต์
1. Domain
๋๋ฉ์ธ์ www.naver.com๊ณผ ๊ณผ ๊ฐ์ด ์๋ฒ์ ์ ์ํ ์์๋ ์ฃผ์๋ฅผ ๋งํ๋ค. ๋ง์ฝ ์์ฒญํด์ผํ URL์ด http://www.example.com:3000/users/login ์ด๋ผ๋ฉด ์ฌ๊ธฐ์์ ๋๋ฉ์ธ์ example.com์ด ๋๋ค. ์ฟ ํค์ต์ ์ ๋๋ฉ์ธ ์ ๋ณด๊ฐ ์กด์ฌํ๋ฉด ํด๋ผ์ด์ธํธ์์๋ ์ฟ ํค์ ๋๋ฉ์ธ ์ต์ ๊ณผ ์๋ฒ์ ๋๋ฉ์ธ์ด ์ผ์นํด์ผ์ง๋ง ์ฟ ํค๋ฅผ ์ ์ก ๊ฐ๋ฅํ๋ค.
2. Path
์ธ๋ถ๊ฒฝ๋ก๋ ์๋ฒ๊ฐ ๋ผ์ฐํ ์์ ์ฌ์ฉํ๋ ๊ฒฝ๋ก์ด๋ค. ์์ฒญํ๋ URL์ด http://www.example.com:3000/users/login ์ผ๋ ์ฌ๊ธฐ์์ Path๋ /users/login์ด ๋๋ค. ๋ช ์๊ฐ ์๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก / ์ผ๋ก ์ค์ ๋๋ค.Path์ ํน์ง์ ์ค์ ๋ Path๋ฅผ ์ ๋ถ ๋ง์กฑํ๋ฉด, ์์ฒญํ๋ Path๊ฐ ์ถ๊ฐ๋ก ์กด์ฌํ๋๋ผ๋ ์ฟ ํค๋ฅผ ์๋ฒ๋ก ์ ์กํ ์ ์๋ค.
์๋ฅผ๋ค์ด
Path : /users ๋ก ์ค์ ๋์ด ์๋ค๋ฉด, ์์ฒญ๊ฒฝ๋ก๊ฐ /users/something ์ธ๊ฒฝ์ฐ์๋ ์ฟ ํค์ ์ก์ด ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด /users๋ฅผ ๋ง์กฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
3. MaxAge or Expires
์ฟ ํค๊ฐ ์ ํจํ ์ ํจ๊ธฐ๊ฐ์ ์ ํ๋ ์ต์ ์ด๋ค.
MaxAge๋ ์์ผ๋ก ์ฟ ํค๊ฐ ๋ช์ด๋์ ์ ํจํ์ง ์ค์ ํ๋ ์ต์ ์ด๋ค. Expires๋ ์ธ์ ๊น์ง ์ ํจํ์ง Date๋ฅผ ์ง์ ํ๋ค.
๊ธฐ์ค์ ํด๋ผ์ด์ธํธ์ ์๊ฐ์ผ ๊ธฐ์ค์ผ๋ก ํ๊ณ , ์ง์ ๋ ์๊ฐ๊ณผ ๋ ์ง๋ฅผ ์ด๊ณผํ๋ฉด ์ฟ ํค๋ ์๋์ผ๋ก ํ๊ดด๋๋ค. ์ด์ต์ ์ ์ฌ๋ถ์ ๋ฐ๋ผ์ Session Cookie์ Persistent Cookie๋ก ๋๋๋ค.
Session Cookie : MaxAge / Expires ์ต์ ์ด ์๋ ์ฟ ํค, ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ์ค์ผ๋ ์ฌ์ฉํ ์์๋ ์์ ์ฟ ํค์ด๋ฉฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ๋ฉด ์ฟ ํค๊ฐ ์ญ์ ๋๋ค.
Persistent Cookie : ๋ธ๋ผ์ฐ์ ์ ์ข ๋ฃ ์ฌ๋ถ์ ์๊ด์์ด MaxAge / Expires์ ์ง์ ๋ ์ ํจ์๊ฐ๋งํผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ฟ ํค์ด๋ค.
4. Secure
์ฟ ํค์ ์ก์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ๋ฐ๋ผ ์ฟ ํค ์ ์ก์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค. Secure์ต์ ์ด true์ผ๋๋ HTTPS ํ๋กํ ์ฝ์ ์ด์ฉํ ๊ฒฝ์ฐ์๋ง ์ฟ ํค์ ์ก์ด ๊ฐ๋ฅํ๋ค. Secure์ด false์ผ๋๋ Https, Http ๋ชจ๋ ์ฟ ํค์ ์ก์ด ๊ฐ๋ฅํ๋ค.
5. HttpOnly
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ์ ๊ทผ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค. ์ต์ ์ด true์ผ ๊ฒฝ์ฐ, ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฟ ํค์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋ํดํธ๋ false๋ก ์ง์ ๋์ด์๊ณ , ํด๋น์ต์ ์ด false์ธ๊ฒฝ์ฐ XSS๊ณต๊ฒฉ์ ์ทจ์ฝํด์ง๋ค.
6. SameSite
Cross-Site์์ฒญ์ ๋ฐ๋๊ฒฝ์ฐ, ์์ฒญ์์ ์ฌ์ฉํ ๋ฉ์๋์ ํด๋น์ต์ ์ ์กฐํฉ์ ๊ธฐ์ค์ผ๋ก ์๋ฒ์ ์ฟ ํค ์ ์ก ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
๊ฒฐ๋ก
์ฟ ํค์ ํน์ฑ์ ์ด์ฉํ์ฌ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ธ์ฆ์ ๋ณด๋ฅผ ๋ด์ ์ฟ ํค๋ฅผ ์ ์กํ๊ณ , ์ฟ ํค๋ ์ ๋ฌ๋ฐ์ ์ฟ ํค๋ฅผ ์์ฒญ๊ณผ ๊ฐ์ด ์ ์กํ์ฌ Stateless ํ ์ธํฐ๋ท์ Statefulํ๊ฒ ์ ์ง ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ฟ ํค์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด๋๊ฒ์ ์ํํ๋ค.
Session
์ธ์ ์ ์ฟ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ง๋ง, ์ ๋ณด๋ฅผ ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)๊ฐ ์๋ ์๋ฒ์์ ๊ด๋ฆฌํ๋ค. ์ ๋ณด๋ฅผ ์๋ฒ์์ ๊ด๋ฆฌํ๊ธฐ๋๋ฌธ์ ๋ณด์์ฑ์ด ๋์ง๋ง, ์ฌ์ฉ์๊ฐ ๋ง์์ง๋ฉด ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ์ฌ ์ฑ๋ฅ์ ํ์ ์์ธ์ด ๋ ์์๋ค.
์ธ์ ์ ๋์
1. ํด๋ผ์ด์ธํธ์์ ์๋ฒ์ ์ ์ ํ๋ฉด ์ธ์ ID๋ฅผ ๋ฐ๊ธ ๋ฐ๋๋ค.
2. ํด๋ผ์ด์ธํธ๋ ์ธ์ ID์ ๋ํด ์ฟ ํค๋ฅผ ์ฌ์ฉํด์ ์ ์ฅํ๊ณ ๊ฐ์ง๊ณ ์๋๋ค.
3. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ํ ๋, ์ฟ ํค์ ์ธ์ ID๋ฅผ ๊ฐ์ด ์๋ฒ์ ์ ๋ฌํด์ ์์ฒญํ๋ค.
4. ์๋ฒ๋ ์ธ์ ID๋ฅผ ์ ๋ฌ ๋ฐ์์ ๋ณ๋ค๋ฅธ ์์ ์์ด ์ธ์ ID๋ก ์ธ์ ์ ์๋ ํด๋ผ์ด์ธํธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ค.
5. ํด๋ผ์ด์ธํธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ฒ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ๋ค.
๊ฒฐ๋ก
์ฟ ํค์ ์ธ์ ์ ๋น์ทํ ์ญํ ์ ํ๋ค. ์ฐจ์ด์ ์ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ์์น์ธ๋ฐ, ์ฟ ํค๋ ์๋ฒ์ ์์์ ์ฌ์ฉํ์ง ์๊ณ , ์ธ์ ์ ์๋ฒ์ ์์์ ์ฌ์ฉํ๋ค. ์ด๋ฌํ ์ ๋๋ฌธ์ ์ฟ ํค์ ๋นํด ์ธ์ ์ด ๋ณด์์ฑ์ด ๋์ ์ฅ์ ์ด ์์ง๋ง, ์๋ฒ์ ์์์ ์ฌ์ฉํ๋ฏ๋ก ์๋ฒ์ ์ฑ๋ฅ์ด ์ ํ๋ ์์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ฒ์ด ํ ํฐ๊ธฐ๋ฐ์ ์ธ์ฆ๋ฐฉ์(JWT ๋ฑ..)์ ๋์์ด ๋์์ ์ฌ์ฉ๋๊ฒ ๋์๋ค.
์ฐธ์กฐ
https://interconnection.tistory.com/74
https://raonctf.com/essential/study/web/session_connection