XSS(Cross-Site Scripting)
๊ณต๊ฒฉ์๊ฐ ์น ์์์ SQL Injection๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณต๊ฒฉํ๋ ค๋ ์ฌ์ดํธ์ ์
์์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ์
ํ๋ ๊ณต๊ฒฉ์ด๋ค.
์ฃผ๋ก, ๋ค๋ฅธ ์น ์ฌ์ดํธ์ ์ ๋ณด๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ Cross Site Scripting์ด๋ผ๊ณ ๋ช
์นญํ๋ค.
ํด๋น ์ทจ์ฝ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ์ ๋๋ก ๊ฒ์ฌํ์ง ์๊ณ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ํ๋ ์ ์์ผ๋ฉฐ, ๊ณต๊ฒฉ์ ์ฑ๊ณตํ๋ฉด ์ฌ์ดํธ์ ์ ์ํ ์ฌ์ฉ์๋ ์ฝ์ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ๋ก ์คํํ๊ฒ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฟ ํค, ์ธ์ , ํ ํฐ์ ํ์ทจํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํ์ทจํ๊ฑฐ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์ฌ์์ฑํ์ฌ ํดํนํ๊ธฐ๋ ํ๋ค.
์
์์ ์ธ ์ปจํ
์ธ ๋ก๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
1) ์ฟ ํค๋ ์ธ์
์ ๋ณด ํ์ทจ
2) ์ ์์๋ฅผ ์์ ์ด ์๋ํ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
3) ์ ์์ ์ธ ์ฌ์ดํธ์ธ์ฒ ์์กฐํ์ฌ ์ฌ์ฉ์์ ์ปดํจํฐ์ ์
์์ ์ธ ๊ณต๊ฒฉ
๊ณต๊ฒฉ ๋ฃจํธ๋ก๋ ๊ฒ์ํ ๋ฑ์ input ๋ฐ์ค์ ์ฝ๋๋ฅผ ์ฝ์ ํ๊ฑฐ๋, ๋๋ค์์ ์ฝ๋๋ฅผ ์ฌ์ด์ ๊ณต๊ฒฉํ๊ธฐ๋ ํ๋ค.
์ด๋ ๋ฏ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ Stored XSS์ Reflected XSS๋ก ๋๋๋ค.
- Stored XSS
- ์ฌ์ดํธ ๊ฒ์ํ์ด๋ ๋๊ธ, ๋๋ค์ ๋ฑ ์คํฌ๋ฆฝํธ๊ฐ ์๋ฒ์ ์ ์ฅ๋์ด ์คํ๋๋ ๋ฐฉ์
- ๊ฐ์ฅ ์ํํ๊ณ ์ผ๋ฐ์ ์ธ ๊ณต๊ฒฉ ์ ํ
- ์ฌ์ฉ์๊ฐ ๊ฒ์๋ฌผ์ ์ด๋ํ ๋, ๊ณต๊ฒฉ์๊ฐ ์ ๋ ฅํด๋์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ์ฌ์ฉ์์ ์ฟ ํค ์ ๋ณด ๋ฑ์ ํ์ทจ
- ์๋ฒ์ ์ ์ฅ๋ ์ ์ฑ ์ฝ๋๋ ์์คํ ์์ฒด๋ฅผ ๊ณต๊ฒฉํ ์๋ ์์ผ๋ฉด ์น ์ฌ์ฉ์๋ค์๊ฒ ์ ์ฑ ์ฝ๋๋ฅผ ์ ๋ฌํด๋ฒ๋ฆด ์๋ ์๋ค.
- Reflected XSS
- URL ํ๋ผ๋ฏธํฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ด ์๋ฒ์ ์ ์ฅํ์ง ์๊ณ ๊ทธ ์ฆ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๋ฐฉ์
- ํผ์ฑ ๊ณต๊ฒฉ์ ์ผ๋ถ๋ก ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์ฐจ๋จํ๊ธฐ๋ ์ฌ์
- ๋งํฌ๋ฅผ ํด๋ฆญํ๋๋ก ํผํด์๋ฅผ ์์ด๊ณ , ์ ์ธํด ์ธ์ ์ ํ์ด์ฌํน ํ ์ ์๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฑ์ฝ๋๋ฅผ ํผํด์์๊ฒ ๋ฐ์ฌํ์ฌ ํผํด์์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฑ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
XSS ๊ณต๊ฒฉ ์๋ฐฉ ๋ฐฉ๋ฒ
- HttpOnly ์์ฑ ON
- ์๋ฐ์คํฌ๋ฆฝํธ์ document.cookie๋ฅผ ์ด์ฉํด์ ์ฟ ํค์ ์ ์ํ๋ ๊ฒ์ ๋ง๋ ์ต์
- ๊ธฐ๋ณธ์ ์ผ๋ก ONํ๋๊ฒ ์ข๋ค.
- User Input value ์ ํ
- ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ด ํ์ ์ ์ธ ๋ฒ์ฃผ์์ ์๋ค๋ฉด, ๋๋กญ๋ค์ด ๋ฐฉ์์ผ๋ก ๋ฏธ๋ฆฌ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ์ ํต์ ํ ์ ์๋ค.
- Santize value
- ์ ์ฑ HTML์ ํํฐ๋ง ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ
CSRF (Cross-Site Request Fogery, XSRF)
์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ์์ง์๋ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์๋ฅผ ํน์ ์น ์ฌ์ดํธ์ ์์ฒญํ๊ฒ ํ๋ ๊ณต๊ฒฉ์ด๋ค.
XSS๋ฅผ ์ด์ฉํ ๊ณต๊ฒฉ์ด ์ฌ์ฉ์๊ฐ ํน์ ์น ์ฌ์ดํธ๋ฅผ ์ ์ฉํ๋ ์ ์ ๋ ธ๋ ธ๋ค๋ฉด, CSRF ํน์ ์น ์ฌ์ดํธ๊ฐ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ฉํ๋ ์ํ๋ฅผ ๋ ธ๋ฆฐ ๊ฒ์ด๋ค.
์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ๋์ด ์๋ ์ํ์์ CSRF ๊ณต๊ฒฉ ์ฝ๋๊ฐ ์ฝ์ ๋์ด ์๋ ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ๊ณต๊ฒฉ ๋์์ด ๋๋ ์น ์ฌ์ดํธ๋ ์์กฐ๋ ๊ณต๊ฒฉ ๋ช ๋ น์ด ๋ฏฟ์ ์ ์๋ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ก๋ ๊ฒ์ผ๋ก ํ๋จํ๊ฒ ๋์ด ๊ณต๊ฒฉ์ ๋นํ๊ฒ ๋๋ค.
์ํ ์๋ฒ๋ก๋ถํฐ ๋์ ์ธ์ถํ๋ API๊ฐ img ํ๊ทธ๋ก๋ถํฐ ํธ์ถ๋๋ฉด ๋ง์ฝ ํด๋น ์ํ ์ฌ์ดํธ์ ๋ํ ์ฟ ํค๊ฐ ์ ํจํ ์ํ๋ผ๋ฉด HTML์ด ๋ก๋ฉ๋๋ ์๊ฐ ๋์ด ๋น ์ ธ๋๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
<img src="https://bank.example.com/withdraw?account=you&amount=1000000&for=me">
CSRF์ ๊ณต๊ฒฉ์ด ์ฑ๊ณตํ๋ ค๋ฉด (1) ์์กฐ ์์ฒญ์ ์ ์กํ๋ ์๋น์ค์ ํฌ์์๊ฐ ๋ก๊ทธ์ธ ์ํ์ฌ์ผ ํ๊ณ , (2) ํฌ์์๋ ๊ณต๊ฒฉ์๊ฐ ๋ง๋ ํผ์ฑ ์ฌ์ดํธ์ ์ ์ํด์ผ ํ๋ค๋ผ๋ ์กฐ๊ฑด์ด ์๋ค.
CSRF ๊ณต๊ฒฉ ์๋ฐฉ
- Referrer ๊ฒ์ฆ (Samesite ์ฟ ํค ์ค์ )
- Back-end ๋จ์์ Request์ referrer๋ฅผ ํ์ธํ์ฌ domain์ด ์ผ์นํ๋์ง ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- referrer ๊ฒ์ฆ์ ํตํด ๋๋ถ๋ถ์ csrf ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ ์ ์๋ค.
- ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์ฟ ํค๋ ์ ํจ ์๊ฐ์ ์งง๊ฒ ์ค์ ํด์ผ ํ๋ค.
- ์ฟ ํค์ SameSite ์์ฑ์ Strict ๋๋ Lax ๋ก ์ค์ ํ๋ค. (Strict๋ก ์ค์ ํ๋ฉด ๋๋ฉ์ธ์ด ์ผ์นํ์ง ์์ผ๋ฉด ์ฟ ํค๊ฐ ์ ์ฅ๋์ง ์๋๋ค.)
- ์ด๋ฌํ ๊ฒ์ฆ์ ํตํด ๋ธ๋ผ์ฐ์ ์์๋ cross-site ์์ฒญ์ ์ธ์ ์ฟ ํค๋ฅผ ๋ณด๋ด์ง ์๋๋ค.
- Security Token ์ฌ์ฉ (CSRF Token)
- Referrer ๊ฒ์ฆ์ด ๋ถ๊ฐํ ํ๊ฒฝ์ด๋ผ๋ฉด, Security Token์ ํ์ฉํ๋ค.
- ์ฌ์ฉ์ ์ธ์ ์ ์์์ ๋์ ๊ฐ์ ์ ์ฅํ๊ณ ์ฌ์ฉ์์ ์์ฒญ๋ง๋ค ํด๋น ๋์ ๊ฐ์ ํฌํจ์์ผ ์ ์กํ๋ค.
- ์ดํ Back-end ๋จ์์ ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ์ธ์ ์ ์ ์ฅ๋ ํ ํฐ ๊ฐ๊ณผ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ์ ๋ฌ๋๋ ํ ํฐ ๊ฐ์ด ์ผ์นํ๋์ง ๊ฒ์ฆํ๋ค.
์ฐธ๊ณ )
https://developer.mozilla.org/en-US/docs/Web/Security/Types_of_attacks#cross-site_scripting_xss
'๐ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ์ฐฉ์ ์์คํ ์์ ๋ฐ์ํ๋ Race Condition์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ (0) | 2025.01.06 |
---|---|
Thread Pool์ ๋ํด์(with Tomcat, Spring Boot) (0) | 2023.09.12 |