React์ experimental_taintUniqueValue๋ฅผ ์ดํด๋ณด์ธ์. ๋ฐ์ดํฐ๊ฐ ์์ ํ์ง ์๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์ฃผ์ ์ทจ์ฝ์ ์ ์ํํ๋ ๊ฐ๋ ฅํ ๋ณด์ ๊ฐํ ๊ธฐ๋ฅ์ ๋๋ค. ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ์ํ ๊ตฌํ, ์ด์ ๋ฐ ์ ํ ์ฌํญ์ ์์๋ณด์ธ์.
React experimental_taintUniqueValue: ๋ณด์ ๊ฐํ๋ฅผ ์ํ ์ข ํฉ ๊ฐ์ด๋
์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๋ ์ค๋๋ ์ ๋์งํธ ํ๊ฒฝ์์ ์น ์ ํ๋ฆฌ์ผ์ด์
๋ณด์์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ
(XSS) ๋ฐ ๊ธฐํ ์ฃผ์
์ทจ์ฝ์ ์ ๋ฐ์ดํฐ ์ ์ถ, ์์๋ ์ฌ์ฉ์ ๊ณ์ ๋ฐ ํํ ์์์ผ๋ก ์ด์ด์ง ์ ์๋ ์ฌ๊ฐํ ์ํ์
๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ๋๋ฆฌ ์ฑํ๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ๊ฐ์ฅ ์ต๊ทผ์ ํ์ ์ค ํ๋๋ ์ค์ผ๋ ๋ฐ์ดํฐ๊ฐ ์์ ํ์ง ์์ ์ปจํ
์คํธ์์ ์ฌ์ฉ๋์ง ์๋๋ก ์ค๊ณ๋์ด ๋ณด์์ ๊ฐํํ๋ experimental_taintUniqueValue
๊ธฐ๋ฅ์
๋๋ค.
์ฃผ์ ์ทจ์ฝ์ ์ดํด
experimental_taintUniqueValue
์ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ธฐ ์ ์ ์ฃผ์
์ทจ์ฝ์ ์ ํน์ฑ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฌํ ์ทจ์ฝ์ ์ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋์ค์ ์ฝ๋ ๋๋ ๋งํฌ์
์ผ๋ก ํด์๋๋ ๋ฌธ์์ด์ ํตํฉ๋ ๋ ๋ฐ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS): ์ ์ฑ JavaScript ์ฝ๋๋ฅผ ์น์ฌ์ดํธ์ ์ฃผ์ ํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์น๊ฑฐ๋ ์ฌ์ฉ์๋ฅผ ์ ์ฑ ์ฌ์ดํธ๋ก ๋ฆฌ๋๋ ์ ํ๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ํผ์ํ ์ ์์ต๋๋ค.
- SQL ์ฃผ์ : ์ ์ฑ SQL ์ฝ๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์ ์ฃผ์ ํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์ค์ํ ๋ฐ์ดํฐ์ ์ก์ธ์ค, ์์ ๋๋ ์ญ์ ํ ์ ์์ต๋๋ค.
- ๋ช ๋ น ์ฃผ์ : ์ ์ฑ ๋ช ๋ น์ ์์คํ ์ ๋ช ๋ น์ค์ ์ฃผ์ ํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์๋ฒ์์ ์์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
React๋ ๊ธฐ๋ณธ์ ์ผ๋ก DOM์์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ ๋ ์ ์ฌ์ ์ผ๋ก ์ ํดํ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์ด์ค์ผ์ดํํ์ฌ XSS๋ก๋ถํฐ ์ด๋ ์ ๋ ๋ณดํธํฉ๋๋ค. ๊ทธ๋ฌ๋ ํนํ ๋ค์์ ์ฒ๋ฆฌํ ๋ ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์๋ ์๋๋ฆฌ์ค๊ฐ ์ฌ์ ํ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์
๋ ฅ์์ ์ง์ HTML ๋ ๋๋ง:
dangerouslySetInnerHTML
๊ณผ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด React์ ๊ธฐ๋ณธ ์ ๊ณต ๋ณดํธ๋ฅผ ์ฐํํ ์ ์์ต๋๋ค. - ์ฌ์ฉ์ ์ ๋ ฅ์์ URL ๊ตฌ์ฑ: ์ ๋๋ก ์ญ์ ๋์ง ์์ผ๋ฉด ์ฌ์ฉ์ ์ ๊ณต ๋ฐ์ดํฐ๊ฐ URL์ ์ฃผ์ ๋์ด ํผ์ฑ ๊ณต๊ฒฉ ๋๋ ๊ธฐํ ์ ์ฑ ํ๋์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ์ดํฐ ์ ๋ฌ: ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์ง ์์ ๊ฒฝ์ฐ ์ฃผ์ ๊ณต๊ฒฉ์ ์ทจ์ฝํ ์ ์์ต๋๋ค.
experimental_taintUniqueValue
์๊ฐ
experimental_taintUniqueValue
๋ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฅผ "์ค์ผ"์์ผ ์ ์ฌ์ ์ผ๋ก ์์ ํ์ง ์์ ๊ฒ์ผ๋ก ํ์ํ ์ ์๋ React์ ์คํ์ API์
๋๋ค. ์ด "์ค์ผ"์ ํ๋๊ทธ ์ญํ ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์ญ์ ๋๋ ์ ํจ์ฑ ๊ฒ์ฌ ์์ด ํน์ ์ปจํ
์คํธ์์ ์ฌ์ฉํด์๋ ์ ๋๋ค๋ ๊ฒ์ ๋ํ๋
๋๋ค. ๋ชฉํ๋ ๊ฐ๋ฐ์๊ฐ ์ ์ฌ์ ์ผ๋ก ์ ํดํ ๋ฐ์ดํฐ๋ฅผ ์ทจ์ฝ์ ์ ์ ๋ฐํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค์๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์
๋๋ค.
์๋ ๋ฐฉ์
๊ธฐ๋ณธ ์ํฌํ๋ก๋ ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ค์ผ: ์ ๋ขฐํ ์ ์๋ ์์ค(์: ์ฌ์ฉ์ ์
๋ ฅ, ์ธ๋ถ API)์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด
experimental_taintUniqueValue
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ผ๋ฉ๋๋ค. - ์ค์ผ ์ ํ: ์ค์ผ์ ์ค์ผ๋ ๋ฐ์ดํฐ์ ๋ํด ์ํ๋ ์์ ์ ํตํด ์ ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค์ผ๋ ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๊ณผ ์ฐ๊ฒฐํ๋ฉด ์ ๋ฌธ์์ด๋ ์ค์ผ๋ฉ๋๋ค.
- ์์ ํ์ง ์์ ์ฌ์ฉ ๊ฐ์ง: React ๋ฐํ์์ XSS์ ์ทจ์ฝํ ์ ์๋ ์์ฑ์ ์ค์ ํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ์ค์ผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฌ์ ์ผ๋ก ์์ ํ์ง ์์ ์ปจํ ์คํธ์์ ์ฌ์ฉ๋๊ณ ์๋์ง ๊ฐ์งํฉ๋๋ค.
- ์๋ฐฉ ๋๋ ๊ฒฝ๊ณ : ๊ตฌ์ฑ ๋ฐ ์ ์ฌ์ ์ทจ์ฝ์ฑ์ ์ฌ๊ฐ๋์ ๋ฐ๋ผ React๋ ์์ ๋ฐ์์ ๋ฐฉ์งํ๊ฑฐ๋ ๊ฐ๋ฐ์์๊ฒ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
์: ์์ฑ ๊ฐ์์ XSS ๋ฐฉ์ง
์ฌ์ฉ์ ์ ๊ณต ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ <a>
ํ๊ทธ์ href
์์ฑ์ ์ค์ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
function MyComponent({ url }) {
return <a href={url}>์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ธ์</a>;
}
url
prop์ ์
์ฑ JavaScript ์ฝ๋(์: javascript:alert('XSS')
)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด XSS ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. experimental_taintUniqueValue
๋ฅผ ์ฌ์ฉํ๋ฉด url
prop์ ์ค์ผ์ํฌ ์ ์์ต๋๋ค.
import { experimental_taintUniqueValue } from 'react';
function MyComponent({ url }) {
const taintedUrl = experimental_taintUniqueValue(url, 'URL', '์ฌ์ฉ์ ์ ๊ณต URL');
return <a href={taintedUrl}>์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ธ์</a>;
}
์ด์ React๊ฐ ์ค์ผ๋ taintedUrl
์ด href
์์ฑ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ ์์์ ๊ฐ์งํ๋ฉด ๊ตฌ์ฑ์ ๋ฐ๋ผ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๊ฑฐ๋ ์์
์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด๋ XSS ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
experimental_taintUniqueValue
์ ๋งค๊ฐ๋ณ์
experimental_taintUniqueValue
ํจ์๋ ์ธ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํฉ๋๋ค.
- value: ์ค์ผ์ํฌ ๊ฐ์ ๋๋ค.
- sink: ๊ฐ์ด ์ฌ์ฉ๋๋ ์ปจํ ์คํธ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ ๋๋ค(์: "URL", "HTML"). ์ด๋ React๊ฐ ์ค์ผ๋ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ ์ฌ์ ์ํ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- message: ๋ฐ์ดํฐ์ ์ถ์ฒ์ ์ค์ผ๋๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฉ์์ง์ ๋๋ค. ์ด๋ ๋๋ฒ๊น ๋ฐ ๊ฐ์ฌ์ ์ ์ฉํฉ๋๋ค.
experimental_taintUniqueValue
์ฌ์ฉ์ ์ด์
- ๋ณด์ ๊ฐํ: ์์ ํ์ง ์์ ์ปจํ ์คํธ์์ ์ค์ผ๋ ๋ฐ์ดํฐ์ ์ฌ์ฉ์ ๊ฐ์งํ๊ณ ๋ฐฉ์งํ์ฌ ์ฃผ์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๊ฐ๋ฐ์ ์ธ์ ๊ฐ์ : ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ ์ฌ์ ์ํ์ ๋ํ ๊ฐ๋ฐ์์ ์ธ์์ ๋์ ๋๋ค.
- ๋ ์ฌ์ด ๊ฐ์ฌ: ๋ฐ์ดํฐ๊ฐ ์ค์ผ๋๋ ์์น์ ๋ํ ๋ช ํํ ๊ฐ์ฌ ์ถ์ ์ ์ ๊ณตํ์ฌ ์ ์ฌ์ ์ธ ๋ณด์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ์ค์ ์ง์ค์ ๋ณด์ ์ ์ฑ : ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฉํ ์ ์๋ ์ค์ ์ง์ค์ ๋ณด์ ์ ์ฑ ์ ์ ์๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ณ ๋ ค ์ฌํญ
experimental_taintUniqueValue
๋ ์๋นํ ๋ณด์ ์ด์ ์ ์ ๊ณตํ์ง๋ง ์ ํ ์ฌํญ๊ณผ ๊ณ ๋ ค ์ฌํญ์ ์ธ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์คํ์ API: ์คํ์ API์ธ
experimental_taintUniqueValue
๋ React์ ํฅํ ๋ฒ์ ์์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค. - ์ฑ๋ฅ ์ค๋ฒํค๋: ์ค์ผ ์ถ์ ํ๋ก์ธ์ค๋ ํนํ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
- ์คํ:
experimental_taintUniqueValue
๊ฐ ์ค์ ๋ก ์์ ํ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ๋ ๊ฒ์ผ๋ก ํ๋๊ทธ๋ฅผ ์ง์ ํ์ฌ ์คํ์ ์์ฑํ ์ ์์ต๋๋ค. ์คํ์ ์ต์ํํ๋ ค๋ฉด ์ ์คํ ๊ตฌ์ฑ ๋ฐ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค. - ๊ฐ๋ฐ์ ์ฑํ ํ์:
experimental_taintUniqueValue
์ ํจ๊ณผ๋ ๊ฐ๋ฐ์๊ฐ ์ ๋ขฐํ ์ ์๋ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํค๋ ๋ฐ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋์ง ์ฌ๋ถ์ ๋ฌ๋ ค ์์ต๋๋ค. - ๋ง๋ณํต์น์ฝ ์๋:
experimental_taintUniqueValue
๋ ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ, ์ถ๋ ฅ ์ธ์ฝ๋ฉ ๋ฐ ๋ณด์ ๊ฐ์ฌ์ ๊ฐ์ ๋ค๋ฅธ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค.
experimental_taintUniqueValue
์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
experimental_taintUniqueValue
์ ์ด์ ์ ๊ทน๋ํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์.
- ์์ค์์ ๋ฐ์ดํฐ ์ค์ผ: ๋ฐ์ดํฐ ํ๋ฆ์์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ, ์ด์์ ์ผ๋ก๋ ์ ๋ขฐํ ์ ์๋ ์์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ด์ฌ ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํค์ธ์.
- ํน์ ์ฑํฌ ๊ฐ ์ฌ์ฉ: ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋๋ ์ปจํ ์คํธ๋ฅผ ์ ํํ๊ฒ ์ค๋ช ํ๊ธฐ ์ํด ํน์ ์ฑํฌ ๊ฐ(์: "URL", "HTML")์ ์ฌ์ฉํ์ธ์.
- ์๋ฏธ ์๋ ๋ฉ์์ง ์ ๊ณต: ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํค๋ ์ด์ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์๋ฏธ ์๋ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ์ธ์. ์ด๋ ๋๋ฒ๊น ๋ฐ ๊ฐ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- React์ ์ค๋ฅ ์ฒ๋ฆฌ ๊ตฌ์ฑ: ์ ์ฌ์ ์ธ ์ทจ์ฝ์ฑ์ ์ฌ๊ฐ๋์ ๋ฐ๋ผ ์์ ํ์ง ์์ ์์ ์ ๋ฐฉ์งํ๊ฑฐ๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๋๋ก React์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ธ์.
- ์ฒ ์ ํ ํ
์คํธ:
experimental_taintUniqueValue
์ ๊ด๋ จ๋ ์คํ ๋๋ ๊ธฐํ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ธ์. - ๋ค๋ฅธ ๋ณด์ ์กฐ์น์ ๊ฒฐํฉ: ์
๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ, ์ถ๋ ฅ ์ธ์ฝ๋ฉ ๋ฐ ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ์ ๊ฐ์ ๋ค๋ฅธ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก์ ํจ๊ป
experimental_taintUniqueValue
๋ฅผ ์ฌ์ฉํ์ธ์.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์
๋ฐ์ดํฐ ์ค์ผ ๋ฐ ๋ณด์์ ์์น์ ๋ณดํธ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๋ค์์ ๋ค์ํ ์ง์ญ ๋ฐ ๋ฌธํ์์ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ์์ ๋๋ค.
- ์ ์ ์๊ฑฐ๋ ํ๋ซํผ(๊ธ๋ก๋ฒ): ์ ํ ๋ฐ์ดํฐ ๋๋ ๊ณ ๊ฐ ์ ๋ณด์ ๋ํ ๋ฌด๋จ ์ก์ธ์ค๋ก ์ด์ด์ง ์ ์๋ ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ ๊ณต ๊ฒ์์ด๋ฅผ ์ค์ผ์ํต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ์ฌ์ดํธ๋ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ํ์๋ ๋ ์ ์ฑ ์ฝ๋๊ฐ ์คํ๋์ง ์๋๋ก ์์ด, ์คํ์ธ์ด, ๋ถ๊ฒฝ์ด ๋๋ ์๋์ด๋ก ์ ๋ ฅ๋ ๊ฒ์์ด๋ฅผ ์ค์ผ์ํฌ ์ ์์ต๋๋ค.
- ์์ ๋ฏธ๋์ด ํ๋ซํผ(๊ธ๋ก๋ฒ): ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ ํ์น๊ฑฐ๋ ๋ฉ์จ์ด๋ฅผ ํ์ฐ์ํฌ ์ ์๋ XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ์ ์์ฑ ์ฝํ ์ธ (๊ฒ์๋ฌผ, ๋๊ธ, ํ๋กํ)๋ฅผ ์ค์ผ์ํต๋๋ค. ํค๋ฆด ๋ฌธ์, ๊ทธ๋ฆฌ์ค ๋ฌธ์ ๋๋ ๋ค์ํ ์์์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๋ ์ด๋ฆ์ด ์์ ํ๊ฒ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์จ๋ผ์ธ ๋ฑ ํน ์ ํ๋ฆฌ์ผ์ด์ (๊ธ๋ก๋ฒ): ๊ณ์ ์ ๋ํ ๋ฌด๋จ ์ก์ธ์ค ๋๋ ๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ธ์ต ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํต๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ํ์น๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์์์ ์ ๋ ฅ๋ ์ํ ๊ณ์ข ๋ฒํธ์ ๊ธ์ก์ ์ค์ผ์ํต๋๋ค.
- ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (CMS)(๊ธ๋ก๋ฒ): CMS ์์คํ ์์ ์ฌ์ฉ์ ์ ๊ณต ์ฝํ ์ธ , ํนํ ๊ด๋ฆฌ์ ๋๋ ์ฝํ ์ธ ์ ์์์ HTML ์ ๋ ฅ์ ํ์ฉํ๋ ๊ฒฝ์ฐ ์ค์ผ์ํต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋์ค์ด, ๋ ์ผ์ด, ์ผ๋ณธ์ด์ ๊ฐ์ ์ฌ๋ฌ ์ธ์ด๋ก ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ๋๋ CMS๋ ๋ ๋๋ง๋ ํ์ด์ง์์ XSS ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ชจ๋ ์ฌ์ฉ์ ์ ๊ณต ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์์ผ์ผ ํฉ๋๋ค.
- ์ฌํ ์์ฝ ํ๋ซํผ(๊ธ๋ก๋ฒ): ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ชฉ์ ์ง ๊ฒ์์ด์ ์ฌํ์ ์ด๋ฆ์ ์ค์ผ์ํต๋๋ค. ์ด๋ฆ์ ํน์ ๋ฌธ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๊ณ ๋ค์ํ ๊ตญ์ ๋ฌธ์ ์ธํธ๋ฅผ ์ง์ํ๋์ง ํ์ธํฉ๋๋ค.
ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉ
React ์ ํ๋ฆฌ์ผ์ด์
์์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ experimental_taintUniqueValue
์ ํธํ๋๋์ง, ์ค์ผ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์ผ ์ถ์ ์ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ๋ฌํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ ํจ์ฑ์ ๊ฒ์ฌํด์ผ ํ ์ ์์ต๋๋ค. ๋ํผ ์ปดํฌ๋ํธ ๋๋ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํ๊ณ ์ค์ผ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋์ง ํ์ธํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
ํฅํ ๋ฐฉํฅ
experimental_taintUniqueValue
๋ ์งํํ๋ ๊ธฐ๋ฅ์ด๋ฉฐ React ํ์ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ๊ณผ ์ค์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ง์์ ์ผ๋ก ๊ฐ์ ํ๊ณ ๊ฐ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ํฅํ ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฑ๋ฅ ๊ฐ์ : ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์ค์ผ ์ถ์ ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํฉ๋๋ค.
- ๋ ์ธ๋ถํ๋ ์ ์ด: ์ค์ผ๋ ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋ ์ธ๋ถํ๋ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ํน์ ์ปจํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์์ ์ฌ์ฉ์ ์ง์ ํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ ์ ๋ถ์ ๋๊ตฌ์ ํตํฉ: ์ ์ฌ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ ์๋์ผ๋ก ๊ฐ์งํ๊ธฐ ์ํด
experimental_taintUniqueValue
๋ฅผ ์ ์ ๋ถ์ ๋๊ตฌ์ ํตํฉํฉ๋๋ค. - ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ํ ํ์ฅ๋ ์ง์: ์ซ์ ๋ฐ ๋ถ์ธ๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ํ ์ค์ผ ์ง์์ ํ์ฅํฉ๋๋ค.
๊ฒฐ๋ก
experimental_taintUniqueValue
๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ์ ๋งํ ๋ณด์ ๊ฐํ ๊ธฐ๋ฅ์
๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ ๋ขฐํ ์ ์๋ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ํฌ ์ ์๋๋ก ํจ์ผ๋ก์จ ์ฃผ์
์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ณ ๋ณด๋ค ์์ ํ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ด์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ ํ ์ฌํญ๊ณผ ๊ณ ๋ ค ์ฌํญ์ ์ธ์ํ๋ ๊ฒ์ด ์ค์ํ์ง๋ง experimental_taintUniqueValue
๋ ๊ฐ๋ ฅํ๊ณ ์์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ๊ฐ ๋ ์ ์์ต๋๋ค. ํนํ ๋ค์ํ ๋ฐ์ดํฐ ์
๋ ฅ์ ๊ฐ์ง ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ์ฌ์ ์๋ฐฉ์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก์ experimental_taintUniqueValue
๋ฅผ ํตํฉํ๋ฉด ์ ๋ฐ์ ์ธ ๋ณด์ ํ์ธ๋ฅผ ๊ฐํํ๊ณ ์
์ฉ ์ํ์ ์ค์ผ ์ ์์ต๋๋ค.
๋ณด์์ ์ผํ์ฑ ์์ ์ด ์๋ ์ง์์ ์ธ ํ๋ก์ธ์ค์์ ๊ธฐ์ตํ์ธ์. ์ทจ์ฝ์ ์ ๋ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ์ต์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๊ณ React ์ปค๋ฎค๋ํฐ์ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ์ฌ ๋ค๋ฅธ ์ฌ๋์๊ฒ์ ๋ฐฐ์ฐ๊ณ React์ ๋ณด์ ๊ธฐ๋ฅ ๊ฐ์ ์ ๊ธฐ์ฌํ์ธ์.