์น ์ฑ ์ธ์ ๊ด๋ฆฌ: ์ฟ ํค vs JWT vs ๋ฆฌํ๋ ์ ํ ํฐ
์น ์ฑ์ ์ธ์ ๊ด๋ฆฌ๋ฅผ ๋น๊ตํฉ๋๋ค: ์ฟ ํค ์ธ์ , JWT, ๋ฆฌํ๋ ์ ํ ํฐ์ ์ํ ๋ชจ๋ธ๊ณผ ํ์ค์ ์ธ ๋ก๊ทธ์์ ์๊ตฌ์ฌํญ์ ์ค์ฌ์ผ๋ก ์ค๋ช ํฉ๋๋ค.

์ธ์ ๊ด๋ฆฌ๋ ์ค์ ๋ก ๋ฌด์์ ํ๋๊ฐ
์ธ์ ์ ๋๊ตฐ๊ฐ ๋ก๊ทธ์ธํ ํ ์ฑ์ด ํ ๊ฐ์ง ์ง๋ฌธ์ ๋ตํ๋ ๋ฐฉ์์ ๋๋ค: "์ง๊ธ ๋น์ ์ ๋๊ตฌ์ธ๊ฐ?" ๊ทธ ๋ต์ด ์ ๋ขฐํ ์ ์์ผ๋ฉด ์ฑ์ ์ฌ์ฉ์๊ฐ ๋ฌด์์ ๋ณผ ์ ์๊ณ , ๋ฌด์์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ์ด๋ค ๋์์ ์ฐจ๋จํด์ผ ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
"๋ก๊ทธ์ธ ์ํ ์ ์ง"๋ ์ฌ์ค์ ๋ณด์์์ ์ ํ์ ๋๋ค. ์ฌ์ฉ์์ ์ ์ ์ ํจ ๊ธฐ๊ฐ์ ์ผ๋ง๋ ๊ธธ๊ฒ ๋์ง, ์ ์์ ์ฆ๋ช ํ๋ ์ ๋ณด๊ฐ ์ด๋์ ์ ์ฅ๋ ์ง, ๊ทธ ์ฆ๋ช ์ ๋ณด๊ฐ ๋ณต์ฌ๋๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.
๋๋ถ๋ถ์ ์น ์ฑ ๊ตฌ์ฑ์ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์์ ์์กดํฉ๋๋ค:
- ์ฟ ํค ๊ธฐ๋ฐ ์๋ฒ ์ธ์ : ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ ์๋ฒ๊ฐ ๊ฐ ์์ฒญ๋ง๋ค ์ธ์ ์ ์กฐํํฉ๋๋ค.
- JWT ์ก์ธ์ค ํ ํฐ: ํด๋ผ์ด์ธํธ๊ฐ ์๋ช ๋ ํ ํฐ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ ์์ด ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- ๋ฆฌํ๋ ์ ํ ํฐ: ์งง์ ์๋ช ์ ์ก์ธ์ค ํ ํฐ์ ์๋ก ๋ฐ๊ธ๋ฐ์ ๋ ์ฌ์ฉํ๋ ๋ ์ค๋ ์ง์๋๋ ์๊ฒฉ ์ฆ๋ช ์ ๋๋ค.
์ด๊ฒ๋ค์ ์๋ก ๊ฒฝ์ํ๋ "์คํ์ผ"์ด๋ผ๊ธฐ๋ณด๋ค ๋์ผํ ํธ๋ ์ด๋์คํ๋ฅผ ๋ค๋ฃจ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋๋ค: ์๋ ๋ ์ ์ด, ๋จ์์ฑ ๋ ์ ์ฐ์ฑ, "์ง๊ธ ๋ฐ๋ก ๋ฌดํจํํ ์ ์๋๊ฐ?" ๋ "์ค์ค๋ก ๋ง๋ฃ๋๋๊ฐ?" ๊ฐ์ ๊ธฐ์ค์ ๋๋ค.
์ ์ฉํ ํ๊ฐ ๋ฐฉ๋ฒ์ ์ด๋ ์ต๋๋ค: ๊ณต๊ฒฉ์๊ฐ ์ฑ์ด ์ ์์ ์ฆ๋ช ํ๋ ๊ฒ(์ฟ ํค๋ ํ ํฐ)์ ํ์น๋ฉด ๋ฌด์์ ํ ์ ์๊ณ ์ผ๋ง๋ ์ค๋ ํ ์ ์๋๊ฐ? ์ฆ๊ฐ์ ์ธ ์๋ฒ ์ธก ์ ์ด๊ฐ ํ์ํ ๋๋ ์ฟ ํค ์ธ์ ์ด ์ ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค(๊ฐ์ ๋ก๊ทธ์์์ด๋ ์ฆ์ ์ ๊ธ ๋ฑ). JWT๋ ์ฌ๋ฌ ์๋น์ค ๊ฐ์ ์ํ ์์ด ๊ฒ์ฆํด์ผ ํ ๋ ์ ํฉํ์ง๋ง ์ฆ์ ์ฒ ํ๊ฐ ํ์ํ๋ฉด ๋ฒ๊ฑฐ๋ก์์ง๋๋ค.
์ด๋ค ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ชจ๋ ์ํฉ์์ ์ด๊ธฐ๋ ๊ฒ์ ์๋๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๊ทผ๋ฒ์ ์ํ ๋ชจ๋ธ, ๋ก๊ทธ์์ ์๊ตฌ ์ฌํญ์ ์๊ฒฉ์ฑ, ๊ทธ๋ฆฌ๊ณ ํ์ด ํ์ค์ ์ผ๋ก ์ ์งํ ์ ์๋ ๋ณต์ก์ฑ ์์ค์ ๋ฌ๋ ค ์์ต๋๋ค.
์ ๋ต์ ๋ฐ๊พธ๋ ์ํ ๋ชจ๋ธ๋ค
์ข์ ์ธ์ ์ค๊ณ๋ "์ต๊ณ ์" ํ ํฐ ์ ํ์ ๋ ์์กดํ๊ณ , ์ค์ ๋ก ์ด๋ค ๊ณต๊ฒฉ์ ๊ฒฌ๋์ผ ํ๋์ง์ ๋ ์์กดํฉ๋๋ค.
๊ณต๊ฒฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ฅ์(์: localStorage)์์ ๋ฐ์ดํฐ๋ฅผ ํ์น๋ค๋ฉด, ํ์ด์ง JavaScript๊ฐ ์ฝ์ ์ ์๋ JWT ์ก์ธ์ค ํ ํฐ์ ์ฝ๊ฒ ํ์ทจ๋ฉ๋๋ค. ๋ฐ๋ฉด์ ์ฟ ํค๋ ๋ค๋ฆ ๋๋ค: HttpOnly๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์ผ๋ฐ ํ์ด์ง ์ฝ๋์์ ์ฝ์ ์ ์์ด์ ๋จ์ํ "ํ ํฐ ํ์น๊ธฐ" ๊ณต๊ฒฉ์ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ํ์ง๋ง ๊ธฐ๊ธฐ๋ฅผ ๊ฐ์ง ์ฌ๋์ด ์ง์ ์ ๊ทผํ ์ ์๊ฑฐ๋(๋ถ์ค ๋ ธํธ๋ถ, ์ ์ฑ์ฝ๋, ๊ณต์ ์ปดํจํฐ) ๋ธ๋ผ์ฐ์ ํ๋กํ์์ ์ฟ ํค๋ฅผ ๋ณต์ฌํ ์๋ ์์ต๋๋ค.
XSS(๊ณต๊ฒฉ์ ์ฝ๋๊ฐ ํ์ด์ง์์ ์คํ๋๋ ์ํฉ)๋ ๋ชจ๋ ๊ฒ์ ๋ฐ๊ฟ๋๋ค. XSS๊ฐ ์๋ค๋ฉด ๊ณต๊ฒฉ์๋ ์๋ฌด๊ฒ๋ ํ์น์ง ์๊ณ ๋ ํผํด์์ ์ด๋ฏธ ๋ก๊ทธ์ธ๋ ์ธ์ ์ ์ฌ์ฉํด ์กฐ์์ ํ ์ ์์ต๋๋ค. HttpOnly ์ฟ ํค๋ ์ธ์ ๋น๋ฐ์ ์ฝ์ง ๋ชปํ๊ฒ ๋ง์์ฃผ์ง๋ง, ๊ณต๊ฒฉ์๊ฐ ํ์ด์ง์์ ์์ฒญ์ ์คํํ๋ ๊ฒ์ ๋ง์ง๋ ์์ต๋๋ค.
CSRF(๋ค๋ฅธ ์ฌ์ดํธ๊ฐ ์์น ์๋ ๋์์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ณต๊ฒฉ)๋ ์ฃผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ฟ ํค๋ฅผ ๋ถ์ฌ ๋ณด๋ด๋ ์ฟ ํค ๊ธฐ๋ฐ ์ธ์
์ ์ํํฉ๋๋ค. ์ฟ ํค์ ์์กดํ๋ค๋ฉด ๋ช
ํํ CSRF ๋ฐฉ์ด๊ฐ ํ์ํฉ๋๋ค: ์๋์ ์ธ SameSite ์ค์ , ์ํฐ-CSRF ํ ํฐ, ์ํ ๋ณ๊ฒฝ ์์ฒญ์ ์ ์คํ ์ฒ๋ฆฌ ๋ฑ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ฉด Authorization ํค๋๋ก ๋ณด๋ด๋ JWT๋ ์ ํต์ CSRF์ ๋ ์ทจ์ฝํ์ง๋ง, JavaScript๊ฐ ์ฝ์ ์ ์๋ ๊ณณ์ ์ ์ฅํ๋ฉด XSS์ ๋
ธ์ถ๋ฉ๋๋ค.
์ฌ์ฌ์ฉ ๊ณต๊ฒฉ(ํ์ทจ๋ ์๊ฒฉ ์ฆ๋ช ์ฌ์ฌ์ฉ)์ ์๋ฒ ์ธก ์ธ์ ์ด ๊ฐํ ๋ฉด๋ชจ๋ฅผ ๋ณด์ด๋ ๊ณณ์ ๋๋ค: ์ธ์ ID๋ฅผ ์ฆ์ ๋ฌดํจํํ ์ ์์ต๋๋ค. ์งง์ ์๋ช ์ JWT๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์๊ฐ์ ์ค์ด์ง๋ง, ํ ํฐ์ด ์ ํจํ ๋์์๋ ์ฌ์ฌ์ฉ์ ๋ง์ง ๋ชปํฉ๋๋ค.
๊ณต์ ๊ธฐ๊ธฐ๋ ๋ถ์ค๋ ํด๋ํฐ์ "๋ก๊ทธ์์"์ ์ค์ ์ํ ๋ชจ๋ธ๋ก ๋ง๋ญ๋๋ค. ๋ณดํต์ ๊ฒฐ์ ์ ์ด๋ฐ ์ง๋ฌธ์ผ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค: ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ธฐ๊ธฐ์์ ๊ฐ์ ๋ก๊ทธ์์ํ ์ ์๋๊ฐ, ์ผ๋ง๋ ๋นจ๋ฆฌ ์ ์ฉ๋์ด์ผ ํ๋๊ฐ, ๋ฆฌํ๋ ์ ํ ํฐ์ด ํ์ทจ๋๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋๋๊ฐ, "๊ธฐ์ตํ๊ธฐ(remember me)" ์ธ์ ์ ํ์ฉํ๋๊ฐ? ๋ง์ ํ์ ์ง์ ์ ๊ทผ์ ๊ณ ๊ฐ ์ ๊ทผ๋ณด๋ค ๋ ์๊ฒฉํ๊ฒ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ํ์์์๊ณผ ๋ฌดํจํ ๊ธฐ๋์น๊ฐ ๋ฌ๋ผ์ง๋๋ค.
์ฟ ํค ์ธ์ : ์ด๋ป๊ฒ ๋์ํ๊ณ ๋ฌด์์ ๋ณดํธํ๋๊ฐ
์ฟ ํค ๊ธฐ๋ฐ ์ธ์ ์ ๊ณ ์ ์ ์ธ ๊ตฌ์ฑ์ ๋๋ค. ๋ก๊ทธ์ธ ํ ์๋ฒ๋ ์ธ์ ๋ ์ฝ๋(์ข ์ข ID์ ์ฌ์ฉ์ ID, ์์ฑ ์๊ฐ, ๋ง๋ฃ ๋ฑ ํ๋)๋ฅผ ์์ฑํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ธ์ ID๋ง ์ฟ ํค์ ์ ์ฅํฉ๋๋ค. ๊ฐ ์์ฒญ์์ ๋ธ๋ผ์ฐ์ ๋ ๊ทธ ์ฟ ํค๋ฅผ ๋ณด๋ด๊ณ ์๋ฒ๋ ์ธ์ ์ ์กฐํํด ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ๊ฒฐ์ ํฉ๋๋ค.
ํฐ ๋ณด์ ์ด์ ์ ์ ์ด์ ๋๋ค. ์ธ์ ์ ๋งค๋ฒ ์๋ฒ์์ ๊ฒ์ฆ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ๋ฅผ ๊ฐ์ ๋ก ๋ก๊ทธ์์ํด์ผ ํ๋ค๋ฉด ์๋ฒ ์ธก ์ธ์ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๋นํ์ฑํํ๋ฉด ์ฆ์ ์๋์ด ์ค๋จ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ฟ ํค๋ฅผ ์ฌ์ ํ ๊ฐ์ง๊ณ ์์ด๋ ์๋ฒ์ ๊ฑฐ๋ถ๊ฐ ์ค์ ๋ก ๋ก๊ทธ์์์ ๊ฐ์ ํฉ๋๋ค.
๋ง์ ๋ณดํธ๋ ์ฟ ํค ์ค์ ์์ ์ต๋๋ค:
- HttpOnly: JavaScript๊ฐ ์ฟ ํค๋ฅผ ์ฝ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
- Secure: HTTPS์์๋ง ์ฟ ํค๋ฅผ ์ ์กํฉ๋๋ค.
- SameSite: ๋ธ๋ผ์ฐ์ ๊ฐ ํฌ๋ก์ค์ฌ์ดํธ ์์ฒญ์ ์ฟ ํค๋ฅผ ๋ณด๋ผ ๋๋ฅผ ์ ํํฉ๋๋ค.
์ธ์ ์ํ๋ฅผ ์ด๋์ ์ ์ฅํ๋๋๊ฐ ํ์ฅ์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ฑ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์ ์ ์ ์งํ๋ฉด ๋จ์ํ์ง๋ง ์ฌ๋ฌ ์๋ฒ๋ฅผ ์ด์ํ๊ฑฐ๋ ์์ฃผ ์ฌ์์ํ๋ฉด ๋ฌธ์ ๊ฐ ์๊น๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ด๊ตฌ์ฑ์ ์ข๊ณ , ๋ง์ ํ์ฑ ์ธ์ ์ ๋ํด ๋น ๋ฅธ ์กฐํ๊ฐ ํ์ํ๋ฉด Redis๊ฐ ์ผ๋ฐ์ ์ ๋๋ค. ํต์ฌ์ ๋์ผํฉ๋๋ค: ์๋ฒ๋ ๊ฐ ์์ฒญ์์ ์ธ์ ์ ์ฐพ๊ณ ๊ฒ์ฆํ ์ ์์ด์ผ ํฉ๋๋ค.
์ฟ ํค ์ธ์ ์ ๊ด๋ฆฌ์ ๋์๋ณด๋๋ ์ง์ ํฌํธ์ฒ๋ผ ์๊ฒฉํ ๋ก๊ทธ์์ ๋์์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค. ์ง์์ด ํด์ฌํ๋ฉด ์๋ฒ ์ธก ์ธ์ ์ ๋นํ์ฑํํ๋ฉด ํ ํฐ ๋ง๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ๊ทผ์ด ์ฆ์ ์ฐจ๋จ๋ฉ๋๋ค.
JWT ์ก์ธ์ค ํ ํฐ: ๊ฐ์ ๊ณผ ์ํํ ๋ถ๋ถ
JWT(JSON Web Token)๋ ์ฌ์ฉ์์ ๋ํ ๋ช ๊ฐ์ง ํด๋ ์(์ฌ์ฉ์ ID, ์ญํ , ํ ๋ํธ ๋ฑ)๊ณผ ๋ง๋ฃ ์๊ฐ์ ๋ด์ ์๋ช ๋ ๋ฌธ์์ด์ ๋๋ค. API๋ ์๋ช ๊ณผ ๋ง๋ฃ๋ฅผ ๋ก์ปฌ์์ ๊ฒ์ฆํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ์ถ ์์ด ์์ฒญ์ ์ธ์ฆํฉ๋๋ค.
์ด ๋๋ฌธ์ JWT๋ API ์ฐ์ ์ ํ, ๋ชจ๋ฐ์ผ ์ฑ, ์ฌ๋ฌ ์๋น์ค๊ฐ ๋์ผํ ์ ์์ ๊ฒ์ฆํด์ผ ํ๋ ์์คํ ์์ ์ธ๊ธฐ๊ฐ ์์ต๋๋ค. ์ฌ๋ฌ ๋ฐฑ์๋ ์ธ์คํด์ค๊ฐ ์์ ๋ ๊ฐ๊ฐ์ด ๊ฐ์ ํ ํฐ์ ๊ฒ์ฆํด ๋์ผํ ๋ต์ ์ป์ ์ ์์ต๋๋ค.
๊ฐ์
JWT ์ก์ธ์ค ํ ํฐ์ ๊ฒ์ฆ์ด ๋น ๋ฅด๊ณ API ํธ์ถ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ฝ์ต๋๋ค. ํ๋ฐํธ์๋๊ฐ ๋ง์ ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํ ๋ ์งง์ ์๋ช ์ ์ก์ธ์ค ํ ํฐ์ ํ๋ฆ์ ๋จ์ํ๊ฒ ์ ์งํด ์ค๋๋ค: ์๋ช ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ์ ID๋ฅผ ์ฝ๊ณ ๊ณ์ ์งํํ๋ฉด ๋ฉ๋๋ค.
์: ๊ณ ๊ฐ ํฌํธ์ด "์ก์ฅ ๋ชฉ๋ก ๋ณด๊ธฐ"์ "ํ๋กํ ์
๋ฐ์ดํธ"๋ฅผ ๋ณ๋ ์๋น์ค์ ์์ฒญํ๋ค๊ณ ํฉ์๋ค. JWT๋ ๊ณ ๊ฐ ID์ customer ๊ฐ์ ์ญํ ์ ๋ด์ ๊ฐ ์๋น์ค๊ฐ ์ธ์
์กฐํ ์์ด ์์ฒญ์ ๊ถํ๋ถ์ฌํ ์ ์๊ฒ ํฉ๋๋ค.
์ํํ ๋ถ๋ถ
๊ฐ์ฅ ํฐ ํธ๋ ์ด๋์คํ๋ ๋ฌดํจํ(revocation)์ ๋๋ค. ํ ํฐ์ด 1์๊ฐ ๋์ ์ ํจํ๋ฉด ์ฌ์ฉ์๊ฐ "๋ก๊ทธ์์"์ ๋๋ ๊ฑฐ๋ ๊ด๋ฆฌ์๊ฐ ๊ณ์ ์ ๋นํ์ฑํํด๋, ์๋ฒ์ ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ ์์ด ๊ทธ 1์๊ฐ ๋์์ ์ผ๋ฐ์ ์ผ๋ก ์ด๋์์๋ ์ ํจํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ์๋ฒ ์ธก ์ฒดํฌ๊ฐ ํ์ํฉ๋๋ค.
JWT๋ ํํ ๋ฐฉ์์ผ๋ก ์ ์ถ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์คํจ ์ง์ ์ผ๋ก๋ localStorage( XSS๊ฐ ์ฝ์ ์ ์์), ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ(์ ์ฑ ํ์ฅ ํ๋ก๊ทธ๋จ), ๋ก๊ทธ์ ์๋ฌ ๋ฆฌํฌํธ, ํค๋๋ฅผ ์บก์ฒํ๋ ํ๋ก์๋ ๋ถ์ ๋๊ตฌ, ์ง์ ์ฑํ ์ด๋ ์คํฌ๋ฆฐ์ท์ ๋ณต์ฌ๋ ํ ํฐ ๋ฑ์ด ์์ต๋๋ค.
์ด ๋๋ฌธ์ JWT ์ก์ธ์ค ํ ํฐ์ "์๊ตฌ ๋ก๊ทธ์ธ"์ฉ์ด ์๋๋ผ ๋จ๊ธฐ๊ฐ ์ ๊ทผ์ฉ์ผ๋ก ๋ ์ ํฉํฉ๋๋ค. ํ ํฐ ์์ ๋ฏผ๊ฐํ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ฃ์ง ๋ง๊ณ , ๋ง๋ฃ ์๊ฐ์ ์งง๊ฒ ์ ์งํ๊ณ , ํ์ทจ๋ ํ ํฐ์ ๋ง๋ฃ๋ ๋๊น์ง ์ ํจํ๋ค๊ณ ๊ฐ์ ํ์ธ์.
๋ฆฌํ๋ ์ ํ ํฐ: JWT ๊ตฌ์ฑ์ผ๋ก ์ค๋ฌด ๊ฐ๋ฅํ ์์คํ ๋ง๋ค๊ธฐ
JWT ์ก์ธ์ค ํ ํฐ์ ์งง๊ฒ ์ฐ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ ์์ ์๋ ์ข์ง๋ง ํ์ค์ ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค: ์ฌ์ฉ์๊ฐ ๋ช ๋ถ๋ง๋ค ๋ค์ ๋ก๊ทธ์ธํด์ผ ํ๋ฉด ์ ๋ฉ๋๋ค. ๋ฆฌํ๋ ์ ํ ํฐ์ ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์ ๋ ์ฑ์ด ์กฐ์ฉํ ์ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ฒ ํด์ค๋๋ค.
๋ฆฌํ๋ ์ ํ ํฐ์ ์ด๋์ ์ ์ฅํ๋๋๋ ์ก์ธ์ค ํ ํฐ๋ณด๋ค ๋ ์ค์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์น ์ฑ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก HttpOnly, Secure ์ฟ ํค์ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ํ ์ ํ์ ๋๋ค. ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ ๊ตฌํ์ด ์ฝ์ง๋ง XSS ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ํ์น๊ธฐ ์ฝ์ต๋๋ค. ์ํ ๋ชจ๋ธ์ XSS๊ฐ ํฌํจ๋๋ค๋ฉด ์ฅ๊ธฐ์ ๋น๋ฐ์ JavaScript๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ์ ์ฅ์์ ๋์ง ๋ง์ธ์.
ํ์ (rotation)์ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ค๋ฌด์์ ์ธ ์ ์๊ฒ ํ๋ ํต์ฌ์ ๋๋ค. ๋ช ์ฃผ ๋์ ๊ฐ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฐ๋ ๋์ , ์ฌ์ฉํ ๋๋ง๋ค ๊ต์ฒดํฉ๋๋ค: ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌํ๋ ์ ํ ํฐ A๋ฅผ ์ ์ํ๋ฉด ์๋ฒ๋ ์ ์ก์ธ์ค ํ ํฐ๊ณผ ๋ฆฌํ๋ ์ ํ ํฐ B๋ฅผ ๋ฐ๊ธํ๊ณ A๋ ๋ฌดํจํ๋ฉ๋๋ค.
๋จ์ํ ํ์ ์ค์ ์ ๋ณดํต ๋ช ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฆ ๋๋ค:
- ์ก์ธ์ค ํ ํฐ์ ์งง๊ฒ ์ ์ง(๋ถ ๋จ์, ์๊ฐ ๋จ์ ์๋).
- ๋ฆฌํ๋ ์ ํ ํฐ์ ์๋ฒ ์ธก์ ์ํ์ ๋ง์ง๋ง ์ฌ์ฉ ์๊ฐ์ ์ ์ฅ.
- ๋ฆฌํ๋ ์ ์๋ง๋ค ํ์ ํ๊ณ ์ด์ ํ ํฐ์ ๋ฌดํจํ.
- ๊ฐ๋ฅํ๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ์ ๊ธฐ๊ธฐ๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ธ๋ฉ.
- ๋จ์ฉ ์กฐ์ฌ๋ฅผ ์ํด ๋ฆฌํ๋ ์ ์ด๋ฒคํธ๋ฅผ ๋ก๊น .
์ฌ์ฌ์ฉ ํ์ง๋ ํต์ฌ ๊ฒฝ๋ณด์ ๋๋ค. ๋ฆฌํ๋ ์ ํ ํฐ A๊ฐ ์ด๋ฏธ ๊ตํ๋์๋๋ฐ ๋์ค์ ๋ค์ ๋ณด์ด๋ฉด ๋ณต์ฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ธ์. ์ผ๋ฐ์ ์ธ ๋์์ ์ธ์ ์ ์ฒด(๋๊ฐ ์ฌ์ฉ์์ ๋ํ ๋ชจ๋ ์ธ์ )๋ฅผ ํ๊ธฐํ๊ณ ์๋ก ๋ก๊ทธ์ธํ๋๋ก ์๊ตฌํ๋ ๊ฒ์ ๋๋ค. ์ด๋ค ์ฌ๋ณธ์ด ์ค์ ์ธ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ก๊ทธ์์์ ๊ดํด์๋ ์๋ฒ๊ฐ ์ํํ ์ ์๋ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํฉ๋๋ค. ๋ณดํต ๋ฆฌํ๋ ์ ํ ํฐ์ ๋ฌดํจ๋ก ํ์ํ๋ ์ธ์ ํ ์ด๋ธ(๋๋ ํ๊ธฐ ๋ชฉ๋ก)์ด ํ์ํฉ๋๋ค. ์ก์ธ์ค ํ ํฐ์ ๋ง๋ฃ๋ ๋๊น์ง ๊ณ์ ์๋ํ ์ ์์ง๋ง, ์ก์ธ์ค ํ ํฐ ์๋ช ์ ์งง๊ฒ ์ ์งํ๋ฉด ๊ทธ ์ฐฝ์ ์๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ก๊ทธ์์ ์๊ตฌ์ฌํญ๊ณผ ์ค์ ๋ก ๊ฐ์ ํ ์ ์๋ ๊ฒ
๋ก๊ทธ์์์ ์ ์ํ๊ธฐ ์ ๊น์ง ๊ฐ๋จํด ๋ณด์ ๋๋ค. ๋ณดํต ๋ ๊ฐ์ง ์์ฒญ์ด ์์ ๋๋ค: "์ด ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์"(ํ ๋ธ๋ผ์ฐ์ ๋ ํด๋ํฐ)๊ณผ "๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์"(๋ชจ๋ ํ์ฑ ์ธ์ ).
ํ์ด๋ฐ ๋ฌธ์ ๋ ์์ต๋๋ค. "์ฆ์ ๋ก๊ทธ์์"์ ์ฑ์ด ์ง๊ธ ๋ฐ๋ก ์๊ฒฉ ์ฆ๋ช ์ ๋ฐ์๋ค์ด์ง ์๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. "๋ง๋ฃ ํ ๋ก๊ทธ์์"์ ํ์ฌ ์ธ์ ์ด๋ ํ ํฐ์ด ์์ฐ์ค๋ฝ๊ฒ ๋ง๋ฃ๋ ๋ ๋ฐ์๋ค์ด์ง ์๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฟ ํค ๊ธฐ๋ฐ ์ธ์ ์์๋ ์ฆ์ ๋ก๊ทธ์์์ด ๊ฐ๋จํฉ๋๋ค. ์๋ฒ๊ฐ ์ธ์ ์ ์์ ํ๋ฏ๋ก ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ฅผ ์ญ์ ํ๊ณ ์๋ฒ ์ธก ์ธ์ ๋ ์ฝ๋๋ฅผ ๋ฌดํจํํ๋ฉด ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ ์ฟ ํค ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํ๋ค ํด๋ ์๋ฒ์ ๊ฑฐ๋ถ๊ฐ ์ค์ ๋ก ๋ก๊ทธ์์์ ๊ฐ์ ํฉ๋๋ค.
JWT ์ ์ฉ ์ธ์ฆ(์ํ ์๋ ์ก์ธ์ค ํ ํฐ๋ง ์๊ณ ์๋ฒ ์กฐํ๊ฐ ์ ํ ์๋ ๊ฒฝ์ฐ)์์๋ ์ง์ ํ ์ฆ์ ๋ก๊ทธ์์์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ํ์ทจ๋ JWT๋ ๋ง๋ฃ๋ ๋๊น์ง ์ ํจํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๊ฐ "์ด ํ ํฐ์ด ๋ฌดํจํ๋์๋๊ฐ?"๋ฅผ ํ์ธํ ๊ณณ์ด ์์ต๋๋ค. ๋ธ๋๋ฆฌ์คํธ(denylist)๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง, ๊ทธ๋ฌ๋ฉด ์ํ๋ฅผ ์ ์งํ๊ณ ํ์ธํด์ผ ํ๋ฏ๋ก ์๋์ ๋จ์์ฑ์ด ์ฌ๋ผ์ง๋๋ค.
ํ์ค์ ์ธ ํจํด์ ์ก์ธ์ค ํ ํฐ์ ์งง๊ฒ ์ ์งํ๊ณ ๋ก๊ทธ์์์ ๋ฆฌํ๋ ์ ํ ํฐ์ผ๋ก ๊ฐ์ ํ๋ ๊ฒ์ ๋๋ค. ์ก์ธ์ค ํ ํฐ์ ๋ช ๋ถ ๋์ ํ์ฉ๋์ง๋ง ์ธ์ ์ ์ ์ง์ํค๋ ๊ฒ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋๋ค. ๋ ธํธ๋ถ์ด ๋๋๋นํ๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ ํจ๋ฐ๋ฆฌ๋ฅผ ๋ฌดํจํํ๋ฉด ํฅํ ์ ๊ทผ์ ๋น ๋ฅด๊ฒ ๋์ ์ ์์ต๋๋ค.
์ฌ์ฉ์์๊ฒ ํ์ค์ ์ผ๋ก ์ฝ์ํ ์ ์๋ ๊ฒ๋ค:
- ์ด ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์: ํด๋น ์ธ์ ๋๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ํ๊ธฐํ๊ณ ๋ก์ปฌ ์ฟ ํค๋ ์ ์ฅ์๋ฅผ ์ญ์ ํฉ๋๋ค.
- ๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์: ํด๋น ๊ณ์ ์ ๋ชจ๋ ์ธ์ ๋๋ ๋ชจ๋ ๋ฆฌํ๋ ์ ํ ํฐ ํจ๋ฐ๋ฆฌ๋ฅผ ํ๊ธฐํฉ๋๋ค.
- "์ฆ์" ํจ๊ณผ: ์๋ฒ ์ธ์ ์์๋ ๋ณด์ฅ๋๋ฉฐ, ์ก์ธ์ค ํ ํฐ์์๋ ๋ง๋ฃ๋ ๋๊น์ง ์ต์ ์ ๋ ธ๋ ฅ์ ํ๋ ์์ค์ ๋๋ค.
- ๊ฐ์ ๋ก๊ทธ์์ ์ด๋ฒคํธ: ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ, ๊ณ์ ๋นํ์ฑํ, ์ญํ ํํฅ ์กฐ์ ๋ฑ.
๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ด๋ ๊ณ์ ๋นํ์ฑํ ๊ฐ์ ๊ฒฝ์ฐ์๋ "์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํ ๊ฒ"์ ๊ธฐ๋์ง ๋ง์ธ์. ๊ณ์ ๋จ์์ ์ธ์ ๋ฒ์ (๋๋ โtoken valid afterโ ํ์์คํฌํ)์ ์ ์ฅํ์ธ์. ๊ฐ ๋ฆฌํ๋ ์(๊ทธ๋ฆฌ๊ณ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ ์์ฒญ) ์ ๋น๊ตํฉ๋๋ค. ๊ฐ์ด ๋ฐ๋์์ผ๋ฉด ๊ฑฐ๋ถํ๊ณ ๋ค์ ๋ก๊ทธ์ธํ๋๋ก ์๊ตฌํ์ธ์.
๋จ๊ณ๋ณ: ์ฑ์ ๋ง๋ ์ธ์ ๋ฐฉ์ ์ ํํ๊ธฐ
์ธ์ ์ค๊ณ๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ๋ ค๋ฉด ๋จผ์ ๊ท์น์ ์ ํ๊ณ ๊ทธ๋ค์์ ๋ฉ์ปค๋์ฆ์ ์ ํํ์ธ์. ๋๋ถ๋ถ์ ๋ฌธ์ ๋ ํ์ด ์ ํ์ด๋ผ์ JWT๋ ์ฟ ํค๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค. ์ํ๊ณผ ๋ก๊ทธ์์ ์๊ตฌ ์ฌํญ์ ๋ง๋ ์ ํ์ ํด์ผ ํฉ๋๋ค.
๋จผ์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ ๋ชจ๋ ์ฅ์๋ฅผ ๋ชฉ๋กํํ์ธ์. ๋ธ๋ผ์ฐ์ ์ฑ์ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ฑ, ๋ด๋ถ ๊ด๋ฆฌ์ ๋๊ตฌ, ํํธ๋ ํตํฉ๊ณผ ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค. ๊ฐ๊ฐ์ ์์ ํ๊ฒ ์ ์ฅํ ์ ์๋ ๋ฐฉ์, ๋ก๊ทธ์ธ ๊ฐฑ์ ๋ฐฉ๋ฒ, ๋ก๊ทธ์์์ ์๋ฏธ๋ฅผ ๋ฐ๊ฟ๋๋ค.
๋๋ถ๋ถ ํ์ ์ ํจํ ์ค์ฉ์ ์์:
- ํด๋ผ์ด์ธํธ ๋ชฉ๋ก ์์ฑ: ์น, iOS/Android, ๋ด๋ถ ๋๊ตฌ, ์ 3์ ์ก์ธ์ค.
- ๊ธฐ๋ณธ ์ํ ๋ชจ๋ธ ์ ํ: XSS, CSRF, ๋๋ ๊ธฐ๊ธฐ ๋ฑ.
- ๋ก๊ทธ์์์ด ๋ฌด์์ ๋ณด์ฅํด์ผ ํ๋์ง ๊ฒฐ์ : ์ด ๊ธฐ๊ธฐ, ๋ชจ๋ ๊ธฐ๊ธฐ, ๊ด๋ฆฌ์ ๊ฐ์ ๋ก๊ทธ์์ ๋ฑ.
- ๊ธฐ๋ณธ ํจํด ์ ํ: ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ (์๋ฒ๊ฐ ๊ธฐ์ต) ๋๋ ์ก์ธ์ค ํ ํฐ + ๋ฆฌํ๋ ์ ํ ํฐ.
- ํ์์์๊ณผ ๋์ ๊ท์น ์ค์ : ์ ํด ๋ ์ ๋ ๋ง๋ฃ, ์์ฌ์ค๋ฌ์ด ์ฌ์ฌ์ฉ ์ ์กฐ์น.
๊ทธ๋ค์ ์์คํ ์ด ์ค์ ๋ก ์ด๋ค ์ฝ์์ ํ๋์ง ๋ฌธ์ํํ์ธ์. ์: "์น ์ธ์ ์ ์ ํด 30๋ถ ๋๋ ์ ๋ 7์ผ ํ ๋ง๋ฃ๋ฉ๋๋ค. ๊ด๋ฆฌ์๋ 60์ด ์ด๋ด์ ๊ฐ์ ๋ก๊ทธ์์ํ ์ ์์ต๋๋ค. ๋ถ์ค ์ ํ๊ธฐ๋ ์๊ฒฉ์ผ๋ก ๋นํ์ฑํํ ์ ์์ต๋๋ค." ์ด๋ฐ ๋ฌธ์ฅ๋ค์ด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋ ์ค์ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํจํด์ ๋ง๋ ๋ชจ๋ํฐ๋ง์ ์ถ๊ฐํ์ธ์. ํ ํฐ ๊ธฐ๋ฐ ์ค์ ์์๋ ๋ฆฌํ๋ ์ ํ ํฐ ์ฌ์ฌ์ฉ ํ์ง๊ฐ ๊ฐ๋ ฅํ ์ ํธ์ ๋๋ค(๊ฐ์ ๋ฆฌํ๋ ์ ํ ํฐ์ด ๋ ๋ฒ ์ฌ์ฉ๋จ). ์ด๋ฅผ ํ์ทจ๋ก ๊ฐ์ฃผํ๊ณ ์ธ์ ํจ๋ฐ๋ฆฌ๋ฅผ ํ๊ธฐํ๊ณ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ์ธ์.
๊ณ์ ํ์ทจ๋ก ์ด์ด์ง๋ ํํ ์ค์๋ค
๋๋ถ๋ถ์ ๊ณ์ ํ์ทจ๋ "์๋ฆฌํ ํดํน"์ด ์๋๋๋ค. ์์ธก ๊ฐ๋ฅํ ์ธ์ ์ค์์์ ์ค๋ ๋จ์ํ ์ฑ๊ณต ์ฌ๋ก์ ๋๋ค. ์ข์ ์ธ์ ์ฒ๋ฆฌ๋ ๊ณต๊ฒฉ์์๊ฒ ์๊ฒฉ ์ฆ๋ช ์ ํ์น๊ฑฐ๋ ์ฌ์ฌ์ฉํ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์๋ ๊ฒ์ ๋๋ค.
ํํ ํจ์ ์ค ํ๋๋ ์ก์ธ์ค ํ ํฐ์ localStorage์ ๋ฃ๊ณ XSS๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฒ์ ๋๋ค. ํ์ด์ง์์ ์ด๋ค ์คํฌ๋ฆฝํธ๋ (๋ฌธ์ ๊ฐ ์๋ ์์กด์ฑ, ์ฃผ์ ๋ ์์ ฏ, ์ ์ฅ๋ ๋๊ธ ๋ฑ) ์คํ๋๋ฉด localStorage๋ฅผ ์ฝ์ด ํ ํฐ์ ๋ฐ์ผ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค. HttpOnly ํ๋๊ทธ๋ฅผ ์ผ ์ฟ ํค๋ JavaScript๊ฐ ์ฝ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด ์ํ์ ์ค์ฌ์ค๋๋ค.
๋ ๋ค๋ฅธ ํจ์ ์ ๋ฆฌํ๋ ์ ํ ํฐ ์์ด JWT๋ฅผ ์ฅ๊ธฐ๊ฐ ์ฌ์ฉํด ๋ฆฌํ๋ ์๋ฅผ ํผํ๋ ค๋ ๊ฒ ์ ๋๋ค. 7์ผ์ง๋ฆฌ ์ก์ธ์ค ํ ํฐ์ 7์ผ ๋์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ ์ฐฝ์ ์ ๊ณตํฉ๋๋ค. ์งง์ ์ก์ธ์ค ํ ํฐ๊ณผ ์ ๊ด๋ฆฌ๋ ๋ฆฌํ๋ ์ ํ ํฐ ์กฐํฉ์ด ๋ ์์ ํฉ๋๋ค. ํนํ ๋ฆฌํ๋ ์๋ฅผ ์ฐจ๋จํ ์ ์์ ๋ ๊ทธ๋ ์ต๋๋ค.
์ฟ ํค๋ ๋ ๋ค๋ฅธ ์ค์ ํจ์ ์ ๊ฐ์ง๋๋ค: CSRF ๋ฐฉ์ด๋ฅผ ์๋ ๊ฒ. ์ฟ ํค ์ธ์ ์ ์ฌ์ฉํ๊ณ ์ํ ๋ณ๊ฒฝ ์์ฒญ์ CSRF ๋ฐฉ์ด ์์ด ๋ฐ์ผ๋ฉด ์ ์ฑ ์ฌ์ดํธ๊ฐ ๋ก๊ทธ์ธ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ฌ ์ ์ ์์ฒญ์ ๋ณด๋ด๊ฒ ํ ์ ์์ต๋๋ค.
์ฌ๊ฑด ์กฐ์ฌ์์ ์์ฃผ ๋ณด์ด๋ ๋ค๋ฅธ ์ค์๋ค:
- ๋ฆฌํ๋ ์ ํ ํฐ์ด ์ ํ ํ์ ํ์ง ์๊ฑฐ๋, ํ์ ์ ๋์ง๋ง ์ฌ์ฌ์ฉ์ ํ์งํ์ง ๋ชปํจ.
- ์ฌ๋ฌ ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ(์ฟ ํค ์ธ์ ๊ณผ ๋ฒ ์ด๋ฌ ํ ํฐ)์ ์ง์ํ๋๋ฐ ์๋ฒ์ "์ด๋ ๊ฒ์ด ์ฐ์ ์ธ์ง" ๊ท์น์ด ๋ถ๋ช ํํจ.
- ํ ํฐ์ด ๋ก๊ทธ(๋ธ๋ผ์ฐ์ ์ฝ์, ๋ถ์ ์ด๋ฒคํธ, ์๋ฒ ์์ฒญ ๋ก๊ทธ)์ ๋จ์ ๋ณต์ฌ๋๊ณ ๋ณด์กด๋จ.
๊ตฌ์ฒด์ ์: ์ง์ ๋ด๋น์๊ฐ "๋๋ฒ๊ทธ ๋ก๊ทธ"๋ฅผ ํฐ์ผ์ ๋ถ์ฌ๋ฃ์ต๋๋ค. ๋ก๊ทธ์ Authorization ํค๋๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ํฐ์ผ ์ ๊ทผ ๊ถํ์ด ์๋ ๋๊ตฌ๋ ๊ทธ ํ ํฐ์ ์ฌ์ํด ๋ด๋น์์ฒ๋ผ ํ๋ํ ์ ์์ต๋๋ค. ํ ํฐ์ ๋น๋ฐ๋ฒํธ์ฒ๋ผ ๋ค๋ฃจ์ธ์: ์ถ๋ ฅํ์ง ๋ง๊ณ , ์ ์ฅํ์ง ๋ง๊ณ , ์งง๊ฒ ์ ์งํ์ธ์.
๋ฐฐํฌ ์ ์ ๋น ๋ฅด๊ฒ ์ ๊ฒํ ์ฌํญ
๋๋ถ๋ถ์ ์ธ์ ๋ฒ๊ทธ๋ ํ๋ คํ ์ํธํ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ํ๋์ ๋๋ฝ๋ ํ๋๊ทธ, ๋๋ฌด ์ค๋ ์ฌ๋ ํ ํฐ, ๋๋ ์ฌ์ธ์ฆ์ด ํ์ํ๋ ํ๋์ ์๋ํฌ์ธํธ์์ ์ต๋๋ค.
๋ฐฐํฌ ์ ์ ํ์น ์ฟ ํค๋ ํ ํฐ์ผ๋ก ๊ณต๊ฒฉ์๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ์ค์ฌ์ผ๋ก ์งง๊ฒ ์ ๊ฒํ์ธ์. ์ ์ฒด ์ธ์ฆ ์ค์ ์ ๋ค์ ์ฐ์ง ์๊ณ ๋ ๋ณด์์ ๋น ๋ฅด๊ฒ ๊ฐ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ถ์ ์ ์ฒดํฌ๋ฆฌ์คํธ
์คํ ์ด์ง์์ ์ด ์ ๊ฒ์ ํ๊ณ ํ๋ก๋์ ์ค์ ์์๋ ๋ค์ ํ์ธํ์ธ์:
- ์ก์ธ์ค ํ ํฐ์ ์งง๊ฒ ์ ์ง(๋ถ ๋จ์)ํ๊ณ , API๊ฐ ์ค์ ๋ก ๋ง๋ฃ ํ ๊ฑฐ๋ถํ๋์ง ํ์ธ.
- ๋ฆฌํ๋ ์ ํ ํฐ์ ๋น๋ฐ๋ฒํธ์ฒ๋ผ ๋ค๋ฃจ๊ธฐ: ๊ฐ๋ฅํ๋ฉด JavaScript๊ฐ ์ฝ์ ์ ์๋ ๊ณณ์ ์ ์ฅ, ๋ฆฌํ๋ ์ ์๋ํฌ์ธํธ๋ก๋ง ์ ์ก, ์ฌ์ฉ ํ ํ์ .
- ์ฟ ํค๋ฅผ ์ธ์ฆ์ ์ฌ์ฉํ๋ค๋ฉด ํ๋๊ทธ ํ์ธ: HttpOnly ์ผ์ง, Secure ์ผ์ง, SameSite ์๋์ ์ผ๋ก ์ค์ . ์ฟ ํค ๋ฒ์(domain๊ณผ path)๊ฐ ํ์ ์ด์์ผ๋ก ๋์ง ์์์ง๋ ํ์ธ.
- ์ฟ ํค๋ก ์ธ์ฆํ๋ ์์ฒญ์ ๊ฒฝ์ฐ CSRF ๋ฐฉ์ด ์ถ๊ฐํ๊ณ ์ํ ๋ณ๊ฒฝ ์๋ํฌ์ธํธ๊ฐ CSRF ์ ํธ ์์ด ์คํจํ๋์ง ํ์ธ.
- ํ๊ธฐ๊ฐ ์ค์ง์ ์ผ๋ก ์๋ํ๋์ง ํ์ธ: ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ด๋ ๊ณ์ ๋นํ์ฑํ ํ ๊ธฐ์กด ์ธ์ ์ด ๋น ๋ฅด๊ฒ ์๋ ์ค๋จ๋๋์ง(์๋ฒ ์ธ์ ์ญ์ , ๋ฆฌํ๋ ์ ํ ํฐ ๋ฌดํจํ, ๋๋ "์ธ์ ๋ฒ์ " ์ฒดํฌ).
๊ทธ๋ค์ ๋ก๊ทธ์์ ์ฝ์์ ํ ์คํธํ์ธ์. "๋ก๊ทธ์์"์ ์ข ์ข "๋ก์ปฌ ์ธ์ ์ ๊ฑฐ"๋ฅผ ์๋ฏธํ์ง๋ง ์ฌ์ฉ์๋ ๋ ๋ง์ ๊ฒ์ ๊ธฐ๋ํฉ๋๋ค.
์ค์ฉ์ ํ ์คํธ: ๋ ธํธ๋ถ๊ณผ ํด๋ํฐ์์ ๋ก๊ทธ์ธํ ๋ค ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ์ธ์. ๋ ธํธ๋ถ์ ๋ค์ ์์ฒญ์์ ๊ฐ์ ๋ก ๋ก๊ทธ์์๋์ด์ผ์ง ๋ช ์๊ฐ ํ๊ฐ ๋์ด์ผ ํ๋ ๊ฒ์ด ์๋๋๋ค. "๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์"๊ณผ ๊ธฐ๊ธฐ ๋ชฉ๋ก์ ์ ๊ณตํ๋ค๋ฉด ๊ฐ ๊ธฐ๊ธฐ๊ฐ ์ทจ์ํ ์ ์๋ ๋ณ๊ฐ์ ์ธ์ ๋๋ ๋ฆฌํ๋ ์ ํ ํฐ ๋ ์ฝ๋์ ๋งคํ๋๋์ง ํ์ธํ์ธ์.
์์: ์ง์ ๊ณ์ ๊ณผ ๊ฐ์ ๋ก๊ทธ์์์ด ํ์ํ ๊ณ ๊ฐ ํฌํธ
์์ ๊ธฐ์ ์ ์์ํด ๋ณด์ธ์. ์น ๊ณ ๊ฐ ํฌํธ(๊ณ ๊ฐ์ด ์ก์ฅ ํ์ธ, ํฐ์ผ ์ด๊ธฐ)๊ณผ ํ์ฅ ์ง์์ฉ ๋ชจ๋ฐ์ผ ์ฑ(์์ , ๋ฉ๋ชจ, ์ฌ์ง)์ด ์์ต๋๋ค. ์ง์๋ค์ ๋๋๋ก ์ ํธ๊ฐ ์๋ ์งํ์์ ์ผํ๋ฏ๋ก ์ฑ์ ์ด๋ ์ ๋ ์คํ๋ผ์ธ ์ํ์์๋ ์๋ํด์ผ ํฉ๋๋ค. ๊ด๋ฆฌ์๋ค์ ํฐ ๋นจ๊ฐ ๋ฒํผ์ ์ํฉ๋๋ค: ํ๋ธ๋ฆฟ ๋ถ์ค์ด๋ ๊ณ์ฝ์ ํด์ฌ ์ ๊ฐ์ ๋ก๊ทธ์์์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์ ์ธ ๊ฐ์ง ํํ ์ํ์ ์ถ๊ฐํฉ๋๋ค: ์ฐจ๋์ ๊ณต์ ํ๋ธ๋ฆฟ(๋๊ตฐ๊ฐ ๋ก๊ทธ์์์ ์์), ํผ์ฑ(์ง์์ด ๊ฐ์ง ํ์ด์ง์ ์๊ฒฉ ์ฆ๋ช ์ ๋ ฅ), ํฌํธ์ ๊ฐ๋ ๋ฐ์ํ๋ XSS ๋ฒ๊ทธ(๋ธ๋ผ์ฐ์ ์์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ํ์น ์ ์๋ ๊ฒ์ ํ์น๋ ค ํจ).
์ฌ๊ธฐ์๋ ์งง์ ์๋ช ์ ์ก์ธ์ค ํ ํฐ + ํ์ ํ๋ ๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ์๋ฒ ์ธก ํ๊ธฐ๊ฐ ์ค๋ฌด์ ์ผ๋ก ์ ํฉํฉ๋๋ค. ๋น ๋ฅธ API ํธ์ถ๊ณผ ์คํ๋ผ์ธ ๋ด์ฑ(off-line tolerance)์ ์ฃผ๋ฉด์๋ ๊ด๋ฆฌ์๊ฐ ์ธ์ ์ ๋์ ์ ์๊ฒ ํฉ๋๋ค.
๊ตฌ์ฑ ์์:
- ์ก์ธ์ค ํ ํฐ ์๋ช : 5~15๋ถ.
- ๋ฆฌํ๋ ์ ํ ํฐ ํ์ : ๊ฐฑ์ ํ ๋๋ง๋ค ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ์ด์ ํ ํฐ์ ๋ฌดํจํ.
- ๋ฆฌํ๋ ์ ํ ํฐ ์์ ํ๊ฒ ์ ์ฅ: ์น์์๋ HttpOnly, Secure ์ฟ ํค์; ๋ชจ๋ฐ์ผ์์๋ OS์ ๋ณด์ ์ ์ฅ์์.
- ๋ฆฌํ๋ ์ ํ ํฐ ์๋ฒ ์ธก ์ถ์ : ํ ํฐ ๋ ์ฝ๋(์ฌ์ฉ์, ๊ธฐ๊ธฐ, ๋ฐ๊ธ ์๊ฐ, ๋ง์ง๋ง ์ฌ์ฉ, ํ๊ธฐ ํ๋๊ทธ)๋ฅผ ์ ์ฅ. ํ์ ๋ ํ ํฐ์ด ์ฌ์ฌ์ฉ๋๋ฉด ๋๋์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ฒด์ธ์ ํ๊ธฐ.
๊ฐ์ ๋ก๊ทธ์์์ ์ํ ๊ฐ๋ฅํด์ง๋๋ค: ๊ด๋ฆฌ์๊ฐ ํด๋น ๊ธฐ๊ธฐ(๋๋ ์ฌ์ฉ์์ ๋ชจ๋ ๊ธฐ๊ธฐ)์ ๋ํ ๋ฆฌํ๋ ์ ํ ํฐ ๋ ์ฝ๋๋ฅผ ํ๊ธฐํ๋ฉด ๋ฉ๋๋ค. ๋๋๋ ๊ธฐ๊ธฐ๋ ํ์ฌ ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋ ๋๊น์ง ๊ณ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ ํ ํฐ์ ์ป์ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ ํ ์ ๊ทผ ์ฐจ๋จ๊น์ง์ ์ต๋ ์๊ฐ์ ์ก์ธ์ค ํ ํฐ ์๋ช ์ด ๋ฉ๋๋ค.
๋ถ์ค ๊ธฐ๊ธฐ์ ๋ํด์๋ ๊ท์น์ ํ์ดํ ์ธ์ด๋ก ์ ์ํ์ธ์: "10๋ถ ์ด๋ด์ ์ฑ์ด ๋๊ธฐํ๋ฅผ ์ค๋จํ๊ณ ๋ค์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค." ์คํ๋ผ์ธ ์์ ์ ๊ธฐ๊ธฐ์์ ๋จ์ ์์ด๋ ๋ค์ ์จ๋ผ์ธ ๋๊ธฐํ๋ ๋ก๊ทธ์ธ์ด ํ์ํ ๋๊น์ง ์คํจํด์ผ ํฉ๋๋ค.
๋ค์ ๋จ๊ณ: ๊ตฌํ, ํ ์คํธ, ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ
"๋ก๊ทธ์์"์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ํ ์ธ์ด๋ก ์ ์ด๋์ธ์. ์: "์ด ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์ํ๋ฉด ํด๋น ๊ธฐ๊ธฐ์์์ ์ ๊ทผ์ด ์ ๊ฑฐ๋ฉ๋๋ค.", "๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์ํ๋ฉด 1๋ถ ์ด๋ด์ ๋ชจ๋ ๊ธฐ๊ธฐ๊ฐ ๊ฐ์ ๋ก๊ทธ์์๋ฉ๋๋ค.", "๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์ ๋ค๋ฅธ ์ธ์ ์ ๋ก๊ทธ์์๋ฉ๋๋ค." ์ด๋ฐ ์ฝ์๋ค์ด ์๋ฒ ์ธก ์ธ์ ์ํ, ํ๊ธฐ ๋ชฉ๋ก, ๋๋ ์งง์ ์๋ช ํ ํฐ ์ค ๋ฌด์์ด ํ์ํ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๊ทธ ์ฝ์๋ค์ ์์ ํ ์คํธ ๊ณํ์ผ๋ก ๋ฐ๊พธ์ธ์. ํ ํฐ๊ณผ ์ธ์ ๋ฒ๊ทธ๋ ์ ์ ํ๋ฆ ๋ฐ๋ชจ์์๋ ์ ๋ณด์ด์ง ์๋ค๊ฐ ์ค์ ์ํฉ(์ ์ ๋ชจ๋, ๋๊ธด ๋คํธ์ํฌ, ๋ค์ค ๊ธฐ๊ธฐ)์์ ์คํจํฉ๋๋ค.
์ค์ฉ์ ํ ์คํธ ์ฒดํฌ๋ฆฌ์คํธ
๋ค์๊ณผ ๊ฐ์ ํผ๋์ค๋ฌ์ด ๊ฒฝ์ฐ๋ฅผ ์ปค๋ฒํ๋ ํ ์คํธ๋ฅผ ์คํํ์ธ์:
- ๋ง๋ฃ: ์ก์ธ์ค ํ ํฐ์ด๋ ์ธ์ ์ด ๋ง๋ฃ๋๋ฉด ์ ๊ทผ์ด ์ค๋จ๋๋๊ฐ?
- ํ๊ธฐ: "๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์" ํ์ ์ด์ ์๊ฒฉ ์ฆ๋ช ์ด ๋ค์ ์์ฒญ์์ ์คํจํ๋๊ฐ?
- ํ์ : ๋ฆฌํ๋ ์ ํ ํฐ ํ์ ์ด ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ์ด์ ๊ฒ์ ๋ฌดํจํํ๋๊ฐ?
- ์ฌ์ฌ์ฉ ํ์ง: ์ค๋๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ํ๋ฉด ๋ฝ๋ค์ด์ด ๋ฐ์ํ๋๊ฐ?
- ๋ค์ค ๊ธฐ๊ธฐ: "ํ์ฌ ๊ธฐ๊ธฐ๋ง" ๋ "๋ชจ๋ ๊ธฐ๊ธฐ" ๊ท์น์ด ๊ฐ์ ๋๊ณ UI๊ฐ ์ผ์นํ๋๊ฐ?
ํ ์คํธ ํ ํ๊ณผ ํจ๊ป ๊ฐ๋จํ ๊ณต๊ฒฉ ๋ฆฌํ์ค์ ํ์ธ์. ์ธ ๊ฐ์ง ์๋๋ฆฌ์ค๋ฅผ ๊ณจ๋ผ ์ข ๋จ๊ฐ์ผ๋ก ์ ๊ฒํฉ๋๋ค: ํ ํฐ์ ์ฝ์ ์ ์๋ XSS ๋ฒ๊ทธ, ์ฟ ํค ์ธ์ ์ ๋ ธ๋ฆฐ CSRF ์๋, ํ์ฑ ์ธ์ ์ด ์๋ ๋ถ์ค ์ ํ๊ธฐ. ์ค๊ณ๊ฐ ์ฝ์๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ธ์.
๋น ๋ฅด๊ฒ ์งํํด์ผ ํ๋ค๋ฉด ์ปค์คํ ์ปค๋ฅํฐ ์ฝ๋๋ฅผ ์ค์ด์ธ์. AppMaster (appmaster.io)์ ์์ฑ๋, ์ค๋ฌด์ฉ ๋ฐฑ์๋์ ์น/๋ค์ดํฐ๋ธ ์ฑ์ ์ ๊ณตํด ๋ง๋ฃ, ํ์ , ๊ฐ์ ๋ก๊ทธ์์ ๊ฐ์ ๊ท์น์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ผ๊ด๋๊ฒ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ ํ ์ต์ ์ ๋๋ค.
์ถ์ ํ ์ถ์ ๊ฒํ ๋ฅผ ์ผ์ ์ ๋ฃ์ผ์ธ์. ์ค์ ์ง์ ํฐ์ผ๊ณผ ์ฌ๊ณ ๋ฅผ ์ฌ์ฉํด ํ์์์, ์ธ์ ์ ํ, "๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์" ๋์์ ์กฐ์ ํ๊ณ ๊ฐ์ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ค์ ์คํํด ์์ ์ด ์กฐ์ฉํ ํํดํ์ง ์๋๋ก ํ์ธ์.


