React๋ ๊ธฐ๋ณธ์ ์ผ๋ก XSS(ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ
) ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. React์ ์ค๊ณ ์์ฒด๊ฐ XSS ์ทจ์ฝ์ ์ ์ค์ด๋๋ก ๋ง๋ค์ด์ ธ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์
๋ ฅ์ด๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ ๋๋งํ ์ ์์ต๋๋ค. ํ์ง๋ง ํน์ ์ํฉ์์๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ์๋์์ React์ XSS ๋ฐฉ์ด ๋ฉ์ปค๋์ฆ๊ณผ ์ฃผ์์ฌํญ์ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค.
React์ ๊ธฐ๋ณธ XSS ๋ฐฉ์ด ๋ฉ์ปค๋์ฆ
React๋ JSX์ ๋ด๋ถ ๋ ๋๋ง ๋ฐฉ์ ๋๋ถ์ XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์๋ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ
React๋ JSX์์ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ ๋, ๊ธฐ๋ณธ์ ์ผ๋ก HTML ํน์ ๋ฌธ์๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, <, >, & ๊ฐ์ ๋ฌธ์๋ < > & ๋ก ๋ณํ๋์ด ํ
์คํธ๋ก ํ์๋ฉ๋๋ค.
function App() { const userInput = "<script>alert('XSS')</script>"; return <div>{userInput}</div>; }
๋ธ๋ผ์ฐ์ ์ ๊ฐ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ ํ <script>alert('XSS')</script> ํ
์คํธ๋ก ํ์๋๋ฉฐ, ์คํฌ๋ฆฝํธ๋ ์คํ๋์ง ์์. React๋ {} ๋ด๋ถ์ ๋ฌธ์์ด์ textContent๋ก ์ฒ๋ฆฌํ์ฌ HTML๋ก ํด์๋์ง ์๋๋ก ํฉ๋๋ค.
JSX์ ์์ ํ ๊ตฌ์กฐ
JSX๋ HTML์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ JavaScript ๊ฐ์ฒด๋ก ์ปดํ์ผ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ๊ฐ ์ง์ HTML๋ก ์ฝ์
๋์ง ์๊ณ , React๊ฐ ๊ด๋ฆฌํ๋ DOM API๋ฅผ ํตํด ์์ ํ๊ฒ ๋ ๋๋ง๋ฉ๋๋ค.
{userInput}๋ React.createElement๋ก ๋ณํ๋์ด ์์ ํ๊ฒ ์ฒ๋ฆฌ๋จ.
์์ฑ ์ด์ค์ผ์ดํ
HTML ์์ฑ(์: value, href)์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ๋๋ React๋ ํน์ ๋ฌธ์๋ฅผ ์ด์ค์ผ์ดํํ์ฌ ์
์ฑ ์ฝ๋(์: javascript:alert('XSS'))๊ฐ ์คํ๋์ง ์๋๋ก ํฉ๋๋ค.
๐ ์์ ํ์ง ์์ dangerouslySetInnerHTML ์ฌ์ฉ.
์คํฌ๋ฆฝํธ ์คํ ๊ฐ๋ฅํ์ฌ XSS ์ทจ์ฝํ๋ค.
const userInput = "<script>alert('XSS')</script>"; return <div dangerouslySetInnerHTML={{ __html: userInput }} />;
๐ ์์ ํ ๋ฐฉ๋ฒ dangerouslySetInnerHTML ์ฌ์ฉ
์ฌ์ฉ์ ์
๋ ฅ์ ์ฝ์
ํ๊ธฐ ์ ์ ๋ฐ๋์ DOMPurify ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ํ(sanitize).
import DOMPurify from "dompurify"; const userInput = "<script>alert('XSS')</script>"; const sanitized = DOMPurify.sanitize(userInput); return <div dangerouslySetInnerHTML={{ __html: sanitized }} />;
React์์ XSS ๋ฐฉ์ด๋ฅผ ๊ฐํํ๋ ๋ฐฉ๋ฒ
React์ ๊ธฐ๋ณธ ๋ฐฉ์ด์ ๋ํด ์ถ๊ฐ์ ์ธ ๋ณด์ ์กฐ์น๋ฅผ ์ ์ฉํ๋ฉด ๋ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์์ต๋๋ค.
๐ ์ฌ์ฉ์ ์ ๋ ฅ ๊ฒ์ฆ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ์ฌ ์์์น ๋ชปํ ํ์(์: ์คํฌ๋ฆฝํธ ํ๊ทธ, ํน์ ๋ฌธ์)์ ์ฐจ๋จ.
- ์: ์ด๋ฉ์ผ ์ ๋ ฅ์ ์ด๋ฉ์ผ ํ์์ด ๋ง๋์ง ํ์ธ.
๐ DOMPurify ์ฌ์ฉ
DOMPurify๋ ์
๋ ฅ๋ HTML ๋ฌธ์์ด์ ๋ถ์ํ๊ณ , ์์ ํ์ง ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ๋ณํํ์ฌ XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํฉ๋๋ค.
<script>alert('XSS')</script>
- "" (๋น ๋ฌธ์์ด,