์ ์ ์ฌํญ: XSS, CSRF ๋ฑ ํด๋ผ์ด์ธํธ ์ธก(cookie/localStorage)์ ๋ค์ํ JWT ์ ์ฅ ๋ฐฉ๋ฒ์ ๋ณด์ ๋ฌธ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@sarneeh ์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๐
ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค ์๊ฐ์ด ์๋ค๋ฉด ๊ฐ์ญ์์ค! (_์ด ์ ์ฅ์์ ๋ํ ์ฐ๊ธฐ ๊ถํ์ด ์์ต๋๋ค_)
JWT์ ์ ์ฉ๋๋ ๋ณด์ ๋ฌธ์ ๋ ๋ค๋ฅธ ํ ํฐ ์ฒด๊ณ์ ๋์ผํฉ๋๋ค.
์
์์ ์ธ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์์ XSS ๊ณต๊ฒฉ์ ์คํํ ์ ์๋ ๊ฒฝ์ฐ JWT๋ฅผ ํ๋ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ์ฌ์ฉ์๋ฅผ ๊ฐ์ฅํ ์ ์์ต๋๋ค.
์
์ฑ JS๋ ์ฟ ํค์ localStorage๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ ์ถํ ์ ์์ต๋๋ค.
JWT๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ OWASP ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ์ง ์์ผ๋ฉฐ ์๋ช ๋ ํด๋ ์/๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ _ํธ๋ฆฌํ_ ๋ฐฉ๋ฒ์ผ ๋ฟ์์ ์๋ ค์ผ ํฉ๋๋ค. ๐
@nelsonic
JWT์ ์ ์ฉ๋๋ ๋ณด์ ๋ฌธ์ ๋ ๋ค๋ฅธ ํ ํฐ ์ฒด๊ณ์ ๋์ผํฉ๋๋ค.
์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์์ XSS ๊ณต๊ฒฉ์ ์คํํ ์ ์๋ ๊ฒฝ์ฐ JWT๋ฅผ ํ๋ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ์ฌ์ฉ์๋ฅผ ๊ฐ์ฅํ ์ ์์ต๋๋ค.
์ ์ฑ JS๋ ์ฟ ํค์ localStorage๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ ์ถํ ์ ์์ต๋๋ค.
๋ถ๋ถ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ JWT๋ฅผ ํ๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ httpOnly
๋ฐ secure
์ฟ ํค์ ๊ฐ์ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ XSS ๊ณต๊ฒฉ์ ๋
ธ์ถ๋์ด ์๋ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์์
์ ์ํํ ์ ์์ผ๋ฏ๋ก(ํ ํฐ์ ํ์น๋ ๊ฒ์ด ์๋๋ผ ์
์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์
ํ๋ ๋ฑ) ์ด๊ฒ์ผ๋ก ์๋ฌด ๊ฒ๋ ๋ณดํธํ ์ ์๋ค๋ ๋ฐ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ localStorage
๋ฅผ ์ฌ์ฉํ๋ cookie
๋ฅผ ์ฌ์ฉํ๋ ์๊ด์๋ค๊ณ ์๊ฐํฉ๋๋ค. OWASP ๊ณต๊ฒฉ์ ๋
ธ์ถ๋์ด ์๋ค๋ฉด ๋งํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค๋ก๋ถํฐ ๋ณดํธ๋ฅผ ๋ฐ๋๋ค๋ฉด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋์์ ์์ ํด์ผ ํฉ๋๋ค.
๋๋ ์ฝ๊ฐ์ PR์ ์ค๋นํ๊ณ ์ถ์ง๋ง ์ง๊ธ์ ์๊ฐ์ด ์ด๋ฐํ๊ณ ์์ผ๋ก 1-2๊ฐ์ ์์ ์์ ๋ก์์ง ๊ฒ์ ๋๋ค. ๋๊ฐ ์ ๋ณด๋ค ๋ชป๋ฐ๋ฉด ํ๋ณด ์ข ํ ๊ฒ์ ๐
@sarneeh ์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค ์๊ฐ์ด ์๋ค๋ฉด ๊ฐ์ญ์์ค! (_์ด ์ ์ฅ์์ ๋ํ ์ฐ๊ธฐ ๊ถํ์ด ์์ต๋๋ค_)JWT์ ์ ์ฉ๋๋ ๋ณด์ ๋ฌธ์ ๋ ๋ค๋ฅธ ํ ํฐ ์ฒด๊ณ์ ๋์ผํฉ๋๋ค.
์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์์ XSS ๊ณต๊ฒฉ์ ์คํํ ์ ์๋ ๊ฒฝ์ฐ JWT๋ฅผ ํ๋ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ์ฌ์ฉ์๋ฅผ ๊ฐ์ฅํ ์ ์์ต๋๋ค.
์ ์ฑ JS๋ ์ฟ ํค์ localStorage๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ ์ถํ ์ ์์ต๋๋ค.JWT๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ OWASP ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ์ง ์์ผ๋ฉฐ ์๋ช ๋ ํด๋ ์/๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ _ํธ๋ฆฌํ_ ๋ฐฉ๋ฒ์ผ ๋ฟ์์ ์๋ ค์ผ ํฉ๋๋ค.
์์์ ๋งํ๋ฏ์ด ์ฟ ํค๋ httpOnly ์ต์
์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ด ๊ธฐ์ฌ ์ ๋ฐ๋ฅด๋ฉด httponly ์ฟ ํค ๋์ localstorage๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋ง ์์ ํ์ง ์์ต๋๋ค.
์ด์ ์น์ ์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ ๋ ์ ์ฅํด์๋ ์ ๋๋ค๋ ์ ์ ๋ถ๋ช ํ ํ์ง๋ง, ํนํ JWT(JSON Web Tokens)๋ฅผ ํธ์ถํด์ผ ํ ํ์์ฑ์ ๋๋๋๋ค.
์ค๋๋ ๋ด๊ฐ ๋ณด๋ ๊ฐ์ฅ ํฐ ๋ณด์ ์๋ฐ์๋ JWT(์ธ์ ๋ฐ์ดํฐ)๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ๋ ์ฌ๋๋ค์ ๋๋ค. ๋ง์ ์ฌ๋๋ค์ JWT๊ฐ ๋ณธ์ง์ ์ผ๋ก ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ๊นจ๋ซ์ง ๋ชปํฉ๋๋ค.
๊ณต๊ฒฉ์๊ฐ JWT ์ฌ๋ณธ์ ์ป์ ์ ์๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์น์ฌ์ดํธ์ ์์ฒญํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์๋ ์ ์ ์์ต๋๋ค. JWT๋ฅผ ์ ์ฉ ์นด๋ ๋ฒํธ๋ ๋น๋ฐ๋ฒํธ์ฒ๋ผ ์ทจ๊ธํ์ญ์์ค. ์ ๋๋ก ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ์ง ๋ง์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@nelsonic
๋ถ๋ถ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ JWT๋ฅผ ํ๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋
httpOnly
๋ฐsecure
์ฟ ํค์ ๊ฐ์ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ XSS ๊ณต๊ฒฉ์ ๋ ธ์ถ๋์ด ์๋ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์์ ์ ์ํํ ์ ์์ผ๋ฏ๋ก(ํ ํฐ์ ํ์น๋ ๊ฒ์ด ์๋๋ผ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๋ฑ) ์ด๊ฒ์ผ๋ก ์๋ฌด ๊ฒ๋ ๋ณดํธํ ์ ์๋ค๋ ๋ฐ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.๊ทธ๋์ ๊ฒฐ๊ตญ
localStorage
๋ฅผ ์ฌ์ฉํ๋cookie
๋ฅผ ์ฌ์ฉํ๋ ์๊ด์๋ค๊ณ ์๊ฐํฉ๋๋ค. OWASP ๊ณต๊ฒฉ์ ๋ ธ์ถ๋์ด ์๋ค๋ฉด ๋งํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค๋ก๋ถํฐ ๋ณดํธ๋ฅผ ๋ฐ๋๋ค๋ฉด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋์์ ์์ ํด์ผ ํฉ๋๋ค.๋๋ ์ฝ๊ฐ์ PR์ ์ค๋นํ๊ณ ์ถ์ง๋ง ์ง๊ธ์ ์๊ฐ์ด ์ด๋ฐํ๊ณ ์์ผ๋ก 1-2๊ฐ์ ์์ ์์ ๋ก์์ง ๊ฒ์ ๋๋ค. ๋๊ฐ ์ ๋ณด๋ค ๋ชป๋ฐ๋ฉด ํ๋ณด ์ข ํ ๊ฒ์ ๐