Spring Boot ํ๋ก์ ํธ๋ฅผ ํ๋์ค์ Security ๊ด๋ จ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ csrf ์ค์ ์ ํด์ผํ๋ค๋ ๊ฒ์ ๋ณด๊ณ , csrf๊ฐ ๊ถ๊ธํด์ ธ์ ์์๋ณด๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ทํ ๊ฐ๋ ์ธ XSS์ ๋ํด์๋ ์ด์ง ๋ง๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. CSRF(Cross-Site Request Forgery: ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ ์์กฐ)
CSRF๋ Cross-Site Request Forgery์ ์ฝ์๋ก, ๋ฒ์ญํ๋ฉด ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
CSRF๋ ์น์ฌ์ดํธ์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ์์ง์ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์(๋ฐ์ดํฐ ์ญ์ , ์์ , ๋ฑ๋ก ๋ฑ)์ ํน์ ์น์ฌ์ดํธ์ ์์ฒญํ๊ฒ ํ๋ ๊ณต๊ฒฉ์ ๋๋ค.
์์ฑ๋ ์์ฒญ์ด ์ธ์ฆ๋ ์ฌ์ฉ์์ ๋์๋ฅผ ๋ฐ์๋์ง ํ์ธํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ CSRF ์ทจ์ฝ์ ์ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ธ์ฆํ ์ธ์ ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์์ ์ธ ์์ฒญ๊ณผ ๋น์ ์์ ์ธ ์์ฒญ์ ๊ตฌ๋ถํ์ง ๋ชปํ๋ ์ ์ ์ ์ฉํ๋ ๊ณต๊ฒฉ ๋ฐฉ์
๊ณต๊ฒฉ์์ ์์ฒญ์ด ์ฌ์ฉ์์ ์์ฒญ์ธ ๊ฒ์ฒ๋ผ ์์ฌ์ ๊ณต๊ฒฉํ๋ ๋ฐฉ์์ด๊ธฐ์ 'ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ ์์กฐ'๋ผ๋ ๋ช ์นญ์ด ๋ถ์์ต๋๋ค.
CSRF ๊ณต๊ฒฉ ์๋๋ฆฌ์ค
CSRF ๊ณต๊ฒฉ์ ์๋๋ฆฌ์ค๋ ์๋์ ๊ฐ์ต๋๋ค.
1๏ธโฃ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ์ ์ํด์ ๋ก๊ทธ์ธํ์ฌ ๊ถํ์ ์ธ์ฆํ๊ณ ์ธ์ ์ ์์ฑํฉ๋๋ค.
2๏ธโฃ ๊ณต๊ฒฉ์๋ ์ ์ฑ ์น์ฌ์ดํธ๋ก ์ฌ์ฉ์๋ฅผ ์ ์ธํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๊ณต๊ฒฉ์์ ์ ์ฑ ์น์ฌ์ดํธ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
3๏ธโฃ ์ฌ์ฉ์๊ฐ ์ ์ฑ ์น์ฌ์ดํธ์ ๋ฐฉ๋ฌธํ๋ฉด, ํด๋น ํ์ด์ง์ ํฌํจ๋ ์คํฌ๋ฆฝํธ๋ ์ด๋ฏธ์ง ํ๊ทธ๊ฐ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์น์ฌ์ดํธ์ ์์ฒญ์ ์๋์ผ๋ก ์ ์กํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ํ ์ฌ์ดํธ๋ผ๊ณ ํ ๋, ๊ณต๊ฒฉ์๊ฐ ์ด๋ฏธ์ง ํ๊ทธ๋ก ๋์ ์ก๊ธํ๋ ์์ฒญ์ ๋ณด๋ธ๋ค๊ณ ํด๋ด ์๋ค.
< img src = "http://bank.com/transfer?amount=9999&toAccount=000011112222" />
ํด๋น ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ์ ์ฑ ์น์ฌ์ดํธ์ ์ฌ์ด๋๋ฉด ์ฌ์ฉ์๊ฐ ์ ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ธฐ ๋๋ฌธ์, ํด๋น ์ํ ์น์ฌ์ดํธ๋ก ๋ ์ก๊ธ ์์ฒญ์ด ๋ณด๋ด์ง๊ฒ ๋ฉ๋๋ค.
4๏ธโฃ ์ฌ์ฉ์๋ ์น์ฌ์ดํธ์ ์ด๋ฏธ ์ธ์ฆ์ ํ ์ํ์ด๋ฏ๋ก, ํด๋น ์์ฒญ์ ์๋ฒ์์ ์ฌ์ฉ์์ ์ ์์ ์ธ ์์ฒญ์ผ๋ก ํ๋จํ๊ณ ์ธ์ฆ๋ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
5๏ธโฃ ์๋ฒ๋ ์ด ์ ์์ ์ธ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์, ๊ณต๊ฒฉ์๊ฐ ์๋ํ ์์ฒญ์ ์ํํ๊ฒ ๋ฉ๋๋ค.
- ์์๋ก ๋ณด๋ฉด, ์ฌ์ฉ์๋ ์๋ํ์ง ์์ ์์ฒญ์ธ, '000011112222' ๊ณ์ข๋ก 9,999์์ ์ก๊ธํ๊ฒ ๋ฉ๋๋ค.
CSRF ๊ณต๊ฒฉ ์ฌ๋ก
CSRF๋ ๋ฐ์ดํฐ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์์ฒญ์ ๋์์ผ๋ก ํฉ๋๋ค.
๊ทธ๋ฌํ ์์ฒญ์ผ๋ก๋ ์ ํ์ ๊ตฌ์ ํ๊ฑฐ๋ ๊ณ์ ์ค์ , ๊ธฐ๋ก์ ์ญ์ ํ๊ฑฐ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฑ์ ์์ฒญ์ด ์์ต๋๋ค.
์ค์ ๋ก 2008๋ ์ ์ฅ์ ์ด ์ค๊ตญ์ธ ํด์ปค์๊ฒ CSRF ๊ณต๊ฒฉ ๋ฐฉ์์ผ๋ก ํ์์ ๋ณด๊ฐ ์ ์ถ๋ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
ํด์ปค๋ ๊ถํ์ ๊ฐ์ง๊ณ ํ์ฌ ๋ด ์์ ์ ํ๋ ์ฅ์ ๊ด๋ฆฌ์์๊ฒ ๋ฉ์ผ์ ๋ณด๋๊ณ , ๊ด๋ฆฌ์๋ ์ด ๋ฉ์ผ์ ์กฐํํ์ต๋๋ค.
ํด์ปค๊ฐ ๋ณด๋ธ ๋ฉ์ผ์๋ ํ๊ทธ๊ฐ ๋ค์ด๊ฐ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์์ต๋๋ค.
< img src = "http://auction.com/changeUserAccount?id=admin&password=admin" ๋๋น = "0" ๋์ด = "0" >
(์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ 0์ด๋ฏ๋ก ๊ด๋ฆฌ์๋ ์ด ์กด์ฌ๋ฅผ ์์ง ๋ชปํฉ๋๋ค.)
๊ด๋ฆฌ์๊ฐ ๋ฉ์ผ์ ์กฐํํ๋ ์๊ฐ ์ด๋ฏธ์ง ํ์ผ์ ๋ฐ์์ค๊ธฐ ์ํด URL์ด ์ด๋ฆฌ๊ฒ ๋๊ณ , ํด์ปค๊ฐ ์ํ๋๋๋ก ๊ด๋ฆฌ์์ ๊ณ์ ์ด ํด์ปค๊ฐ ์ค์ ํ "admin"์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ดํ ํด์ปค๋ ์ด ๊ณ์ ์ผ๋ก ์๋ฒ ๊ด๋ฆฌ์ ํ์ด์ง์ ์ ์ํด์ *๋ฐฑ๋์ด ํ๋ก๊ทธ๋จ์ ์ฌ๋ ธ์ต๋๋ค.
*๋ฐฑ๋์ด ํ๋ก๊ทธ๋จ: ์ ์์ ์ธ ์ ์ฐจ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ
๋ฐฑ๋์ด ํ๋ก๊ทธ๋จ์ ์ด์ฉํด์ ์ฅ์ ๋ด๋ถ ์น ์๋ฒ์ ์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํดํนํ๊ณ , ํ์ ์ ๋ณด๋ฅผ ๋นผ๋ด๊ฐ ๊ฒ์ ๋๋ค.
์ด๋ ์ ์ถ๋ ํ์ ์ ๋ณด๊ฐ 1860๋ง๋ช ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฌํ CSRF ๊ณต๊ฒฉ์ ๋นํ๊ฒ ๋๋ฉด ๋ง๋ํ ํผํด๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด CSRF ํ ํฐ์ ํตํด ํด๋น ์์ฒญ์ด ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ์ ์กํ ๊ฒ์ด ๋ง๋์ง๋ฅผ ํ์ธํ๊ฑฐ๋ ์ฌ์ธ์ฆ์ ์๊ตฌํ๋ ๋ฑ์ ๋ฐฉ์์ผ๋ก CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํด์ผํฉ๋๋ค.
2. CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง - Synchronizer Token Pattern
Spring์์๋ CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ ์ค Synchronizer Token Pattern์ ๊ฐ์ฅ ์ฐ์ธํ๊ณ ํฌ๊ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐํ๊ณ ์์ต๋๋ค. Synchronizer Token Pattern์ CSRF ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๊ธฐ ์ํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๊ณ ์ ํ ๋ณด์ ํ ํฐ์ธ CSRF ํ ํฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๐ CSRF ํ ํฐ
์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ํ๋๋ผ๋ CSRF ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ณดํต JWT๋ง์ ์ด์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋คํ์์๋์๋ ๊ณต๊ฒฉ์ ๋ฐ์ ์ ์์ต๋๋ค. ๊ทธ๋์ CSRF ํ ํฐ์ ์ฌ์ฉํด์ CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํฉ๋๋ค.
CSRF ํ ํฐ์ด๋, ์๋ฒ์ ๋ค์ด์จ ์์ฒญ์ด ์ค์ ์๋ฒ์์ ํ์ฉํ ์์ฒญ์ด ๋ง๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ํ ํฐ์ ๋๋ค.
CSRF ํ ํฐ์ ์๋ฒ์์ ์์ฑํด์ ํด๋ผ์ด์ธํธ์ ๊ณต์ ๋๋ ์ธ์ฆ ๊ฐ์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์์ ์๋ฒ์์ ์ธ์ฆํด์ค CSRF ํ ํฐ์ ํฌํจํด์ ์์ฒญํด์ผํฉ๋๋ค. CSRF ํ ํฐ์ด ์์ผ๋ฉด ์๋ฒ๋ ์์ฒญ์ ๊ฑฐ๋ถํ๊ฒ ๋ฉ๋๋ค.
CSRF ํ ํฐ์ HTML ํผ์ ๋ด์์ ๋ณด๋ด๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ์์ ๋๋ค.
1๏ธโฃ ํด๋ผ์ด์ธํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ HTTP GET ์์ฒญ์ ํตํด ์ก์ธ์คํฉ๋๋ค.
2๏ธโฃ ์๋ฒ๋ CSRF ํ ํฐ์ ์์ฑํ๊ณ HTTP ์ธ์ ์ ์ ์ฅํฉ๋๋ค. ์์ฑ๋ CSRF ํ ํฐ์ HTML ํ์์ ์จ๊ฒจ์ง ํ๊ทธ(hidden)๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
3๏ธโฃ ํด๋ผ์ด์ธํธ๋ HTML ํผ์ ๋ฒํผ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ ๋๋ค. CSRF ํ ํฐ์ HTML ํผ์ Hidden ํ๋์ ํฌํจ๋์ด ์์ผ๋ฏ๋ก CSRF ํ ํฐ ๊ฐ์ด ์์ฒญ ๋งค๊ฐ๋ณ์๋ก ํจ๊ป ์ ์ก๋ฉ๋๋ค.
4๏ธโฃ ์๋ฒ๋ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ์ง์ ๋ CSRF ํ ํฐ ๊ฐ๊ณผ HTTP POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ๋ HTTP ์ธ์ ์ ์ ์ง๋ CSRF ํ ํฐ ๊ฐ์ด ๋์ผํ์ง ํ์ธํฉ๋๋ค. ํ ํฐ ๊ฐ์ด ์ผ์นํ์ง ์์ผ๋ฉด ์๋ชป๋ ์์ฒญ์ผ๋ก, ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ค์ ์ ๋ฆฌํ์๋ฉด, ์๋์ ๊ฐ์ต๋๋ค.
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ํ์ด์ง์ ์ ์์ ์๋ฒ์์๋ CSRF ํ ํฐ์ ์์ฑํด์ ์ฌ์ฉ์ ์ธ์ ์ด ์ ์ฅํฉ๋๋ค.
- ์ดํ ์ฌ์ฉ์๊ฐ ์๋ฒ์ ์ ํ๋ง์ด์ ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ์์ฒญํ ๋ ํ์ด์ง์ Hidden ์ผ๋ก ์จ์ด์๋ CSRF ํ ํฐ ๊ฐ์ด ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค.
- ์๋ฒ์์๋ ์ด CSRF ๊ฐ์ด ์ธ์ ์ ์ ์ฅ๋ ๊ฐ๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ฌ ํด๋น ์์ฒญ์ด ์ ์์ ์ธ ์์ฒญ์์ ํ์ธํ ์ ์์ต๋๋ค.
CSRF ํ ํฐ ์ ์์ฌํญ
[CSRF ํ ํฐ์ ์์น]
- HTML ํผ ์ ์ถ์ hidden ํ๋๋ก ํฌํจ์์ผ์ ์ ์กํด์ผํฉ๋๋ค.
- AJAX ์์ฒญ์ ๋ณด๋ผ์์๋ CSRF ํ ํฐ์ Custom Header ๊ฐ์ผ๋ก ํฌํจ์ํค๊ฑฐ๋ JSON payload(๋ฐ์ดํฐ)๋ก ์ ์กํ ์ ์์ต๋๋ค.
- CSRF ํ ํฐ์ ์ฟ ํค์ ํฌํจ์์ผ์ ์ ์กํ๋ฉด ์๋ฉ๋๋ค.
- CSRF ํ ํฐ์ ์ค์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ ์์ ์ธ ์์ ์ธ์ง๋ฅผ ๊ฒ์ฆํด์ผํ๋๋ฐ, ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ์๋์ผ๋ก HTTP ์์ฒญ์ ํฌํจ๋๋ฏ๋ก, ์ ์์ ์ธ ์์ฒญ์ธ์ง ๊ฒ์ฆํ ์ ์๊ฒ ๋ฉ๋๋ค.
- '์๋ ์ ์ก'์ด๋ผ๋ ๊ธฐ๋ฅ๋๋ฌธ์ ๊ณต๊ฒฉ์๊ฐ ๋ง๋ ์์ฒญ์ด์ฌ๋ ์ฟ ํค๊ฐ ์๋์ผ๋ก ํฌํจ๋์ด ์๋ฒ์ ์ ์ก๋ฉ๋๋ค. ์ด๋ก์ธํด ์๋ฒ๋ ์ด ์์ฒญ์ด ์ ์์ ์ธ ์์ฒญ์ด๋ผ๊ณ ์ฐฉ๊ฐํ์ฌ ์์ฒญ์ ์ํํ ์๋ ์์ต๋๋ค.
- ๋ฐ๋ผ์ CSRF ํ ํฐ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ดํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค.
- CSRF ํ ํฐ์ ์๋ฒ ๋ก๊ทธ๋ URL์ ๋ ธ์ถ๋์ด์๋ ์๋ฉ๋๋ค.
[HTTP ์์ฒญ์ ๋ฐ๋ฅธ ์๊ตฌ์ฌํญ]
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ฒญ์ ๋ํด์๋ง CSRF๋ฅผ ์์ฒญํด๋ ๊ด์ฐฎ์ต๋๋ค. (POST, PUT, PATCH, DELETE)
- ๋จ, ์ด๋ฅผ ์ํด์๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋(=๋ฉฑ๋ฑ ์์ฒญ)์์ฒญ(GET, HEAD, OPTIONS, ๋ฐ TRACE)์ด ์ค์ง ์ฝ๊ธฐ ์ ์ฉ(read-only) ์์ ๋ง ์ํํ๋๋ก ๋ณด์ฅํด์ผํฉ๋๋ค.
- HTTP GET(์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ์์ ํ ์์ฒญ)์๋ CSRF ํ ํฐ์ ํฌํจ์ํค์ง ์์์ผํฉ๋๋ค.
- GET ์์ฒญ์ ์บ์๋๊ฑฐ๋ URL๋ก ๋ ธ์ถ๋ ์ ์๊ธฐ ๋๋ฌธ์ CSRF ํ ํฐ์ด ์ ์ถ๋ ์๋ ์์ต๋๋ค.
- ํ ํฐ์ด ์ ์ถ๋๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ด ํ ํฐ์ ์ฌ์ฌ์ฉํ์ฌ CSRF ๊ณต๊ฒฉ์ ์๋ํ ์๋ ์์ต๋๋ค.
3. CSRF vs XSS
CSRF์ XSS๋ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์์ ๊ณต๊ฒฉ ์ ํ์ด์ง๋ง, ์ฐจ์ด์ ์ด ์์ต๋๋ค.
๋จผ์ XSS๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
XSS(Cross-Site Scripting)
XSS๋ Cross-Site Scripting์ ์ฝ์๋ก, ๋ฒ์ญํ๋ฉด ์ฌ์ดํธ ๊ฐ ์คํฌ๋ฆฝํ ์ ๋๋ค.
XSS ๊ณต๊ฒฉ์ ๊ณต๊ฒฉ์๊ฐ ์น ํ์ด์ง์ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ์ฌ, ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์คํ์ํค๋ ๊ณต๊ฒฉ์ ๋๋ค.
์ด๋ก์ธํด ์ฌ์ฉ์๋ ์๋ํ์ง ์์ ๋์์ ์ํํ๊ฑฐ๋, ๊ณต๊ฒฉ์์๊ฒ ์ฟ ํค, ์ธ์ ๋ฑ์ ์ ๋ณด๋ฅผ ํ์ทจ ๋นํ๊ฒ ๋ฉ๋๋ค.
XSS๋ SQL Injection๊ณผ ํจ๊ป ์น ์์์ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ์ทจ์ฝ์ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
XSS ๊ณต๊ฒฉ ๋์ ๋ฐฉ์
- ์ค์ ์ ๋ณด๋ ์ฟ ํค ๋์ ์๋ฒ์ ์ ์ฅํฉ๋๋ค.
- ์ ๋ณด๋ฅผ ์ํธํ ํฉ๋๋ค.
- httpOnly ์ต์
์ ์ค์ ํฉ๋๋ค.
- document.cookie๋ฅผ ์ด์ฉํด ์ฟ ํค์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฐฉ์ง
- URL Encoding์ด๋ ๋ฌธ์์ด์ ์นํํฉ๋๋ค.
CSRF ์ XSS ์ ์ฐจ์ด
[๊ณต๊ฒฉ ๋์]
- CSRF ๊ณต๊ฒฉ ๋์์ "Server"์ด๊ณ XSS ๊ณต๊ฒฉ ๋์์ "Client"์ ๋๋ค.
- CSRF๋ ํน์ ์น ์ฌ์ดํธ๊ฐ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ๋ขฐํ๋ ์ํ๋ฅผ ๋ ธ๋ฆฐ ๊ฒ์ด๊ณ , XSS๋ ์ฌ์ฉ์๊ฐ ํน์ ์น ์ฌ์ดํธ๋ฅผ ์ ๋ขฐํ๋ ์ ์ ๋ ธ๋ฆฐ ๊ฒ์ ๋๋ค.
[๊ณต๊ฒฉ ๋ฐฉ์]
- CSRF๋ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ฌ ์๋ํ์ง ์์ ์์ฒญ์ ํน์ ์น์ฌ์ดํธ๋ก ๋ณด๋ด๋๋ก ์ ๋ํฉ๋๋ค. ์ฌ์ฉ์์ ๊ถํ์ ์ด์ฉํด ์๋ฒ์ ๋ํ ์ ์ฑ ๊ณต๊ฒฉ์์ ํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
- XSS๋ ๊ณต๊ฒฉ์๊ฐ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์นํ์ด์ง์ ์ฝ์ ํ์ฌ ํด๋น ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ฒ ํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ฏ๋ก ์ฌ์ฉ์์ ๊ถํ์ผ๋ก ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ๊ฑฐ๋ ์์์ ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค.
CSRF ๊ณต๊ฒฉ
1๏ธโฃ ๊ณต๊ฒฉ์์ ์น ์ฌ์ดํธ์ ์๊ธ ์ด์ฒด ์์ฒญ์ ์์กฐํฉ๋๋ค.
2๏ธโฃ ๊ณต๊ฒฉ์๋ ๊ทธ ์์ฒญ์ ํ์ดํผ๋งํฌ(์คํฌ๋ฆฝํธ)์ ์ฝ์ ํ์ฌ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์์๊ฒ ์ ์กํฉ๋๋ค.
3๏ธโฃ ์ฌ์ฉ์๊ฐ ๊ทธ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด, ์ฌ์ฉ์๋ ๋ชจ๋ฅด๊ฒ ์น ์ฌ์ดํธ์ ์์ฒญ์ ์ ์กํ๊ฒ ๋ฉ๋๋ค.
4๏ธโฃ ์น ์ฌ์ดํธ์ ์๋ฒ๋ ๋ก๊ทธ์ธ ๋ ์ฌ์ฉ์์ ์์ฒญ์ด๊ธฐ ๋๋ฌธ์ ์ ์์ผ๋ก ํ๋จํ๊ณ , ์ฌ์ฉ์์ ๊ณ์ ์์ ๊ณต๊ฒฉ์์ ๊ณ์ ์ผ๋ก ์๊ธ์ ์ด์ฒดํฉ๋๋ค.
XSS ๊ณต๊ฒฉ
1๏ธโฃ ๊ณต๊ฒฉ์๊ฐ ์คํฌ๋ฆฝํธ ์ฃผ์ ์ด ๊ฐ๋ฅํ ์ทจ์ฝ์ ์ด ์๋ ์น ์ฌ์ดํธ๋ฅผ ์ฐพ์ต๋๋ค.
2๏ธโฃ ์ทจ์ฝ์ ์ ์ฐพ์ ์ธ์ ์ฟ ํค๋ฅผ ํ์ทจํ๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ดํธ์ ์ฝ์ ํฉ๋๋ค.
3๏ธโฃ ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ์คํฌ๋ฆฝํธ๊ฐ ์๋๋ฉ๋๋ค.
4๏ธโฃ ์๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ฌ์ฉ์์ ์ธ์ ์ฟ ํค๋ฅผ ํ์ทจํฉ๋๋ค.
Reference
Cross Site Request Forgery (CSRF) :: Spring Security
When should you use CSRF protection? Our recommendation is to use CSRF protection for any request that could be processed by a browser by normal users. If you are creating a service that is used only by non-browser clients, you likely want to disable CSRF
docs.spring.io
์น ๋ณด์์ ๊ธฐ๋ณธ: CSRF์ XSS ๊ณต๊ฒฉ ์ดํดํ๊ธฐ
CSRF์ XSS ๊ณต๊ฒฉ์ ๊ฐ๋ ์ ์ดํดํ๊ณ , ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ๋ค์ ๋ํด ์์๋ณด๋ ๊ธ์ ๋๋ค.
f-lab.kr
์ฌ๊ธฐ์๋ CSRF ๊ณต๊ฒฉ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ณ , ์ด๊ฒ์ ์๋ฐฉํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ CSRF Token์ ๋ํด์ ์ ๋ฆฌ๋ฅผ ํ ๊ฒ์ ๋๋ค.
๋ฒจ๋ก๊ทธ.์์ด์คXSS์ CSRF ์ฐจ์ด์ ๋ฐ ๋์ ๋ฐฉ์
์น์ฌ์ดํธ์์ ์๋์น ์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ด์ ์คํ์ํค๋ ๊ธฐ๋ฒ์ ๋งํฉ๋๋ค.์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ ๋ฐ์ ๊ฐ์ ์ ๋๋ก ๊ฒ์ฌํ์ง ์๊ณ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ฉฐ, ๊ฒฐ๊ณผ๋ก ์ฌ์ฉ์๋ ์
velog.io