React์ experimental_taintUniqueValue Sanitization์ ๋ํ ์ฌ์ธต ๋ถ์, ๊ฐ ์ฒ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์์์ ๋ณด์ ์ทจ์ฝ์ ๋ฐฉ์ง ์ญํ ํ๊ตฌ.
React์ experimental_taintUniqueValue Sanitization: ๊ฐ ์ฒ๋ฆฌ ๋ณด์ ๊ฐํ
๋์์์ด ๋ฐ์ ํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ณด์์ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ ๋์ ์ธ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ์ ํ๋ฆฌ์ผ์ด์
๋ณด์์ ๊ฐํํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ ์ง์์ ์ผ๋ก ๋์
ํ๊ณ ์์ต๋๋ค. ํ์ฌ ์คํ์ ์ธ ๊ธฐ๋ฅ ์ค ํ๋๋ experimental_taintUniqueValue์
๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ ์ด ๊ฐ๋ ฅํ Sanitize ๊ธฐ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๊ณ , ๊ทธ ๋ชฉ์ , ์ฌ์ฉ๋ฒ ๋ฐ React ์ ํ๋ฆฌ์ผ์ด์
๋ณด์์ ๋ฏธ์น๋ ์ํฅ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
experimental_taintUniqueValue๋ ๋ฌด์์ธ๊ฐ์?
experimental_taintUniqueValue๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ฃผ์
๊ณต๊ฒฉ๊ณผ ๊ด๋ จ๋ ํน์ ์ ํ์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์ค๊ณ๋ React API์
๋๋ค. ์ด API๋ ๊ฐ์ "tainting"ํ์ฌ ์ ์ฌ์ ์ผ๋ก ์์ ํ์ง ์๊ฑฐ๋ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์์ ์ค๋ ๊ฐ์ผ๋ก ํ์ํฉ๋๋ค. React๊ฐ ๋ณด์ ์ํ์ ์ด๋ํ ์ ์๋ ๋งฅ๋ฝ(์: DOM์ ์ง์ ๋ ๋๋ง)์์ ์ค์ผ๋ ๊ฐ์ ๋ฐ๊ฒฌํ๋ฉด, Sanitizeํ๊ฑฐ๋ ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ์กฐ์น๋ฅผ ์ทจํ์ฌ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ์ํํ ์ ์์ต๋๋ค.
experimental_taintUniqueValue์ ํต์ฌ ์์ด๋์ด๋ ๋ฐ์ดํฐ ์ถ์ฒ๋ฅผ ์ถ์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. ์ด๋ ์ฌ์ฉ์ ์
๋ ฅ, API ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ์ธ๋ถ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํนํ ์ค์ํฉ๋๋ค.
๋ฌธ์ ์ ์ดํด: ์ฃผ์ ๊ณต๊ฒฉ ๋ฐ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ
experimental_taintUniqueValue์ ์ค์์ฑ์ ์์ ํ ์ดํดํ๋ ค๋ฉด ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ ๋ณด์ ์ํ์ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์
๋๋ค. ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ
(XSS) ๋ฐ ์๋ฒ ์ธก ์์ฒญ ์์กฐ(SSRF)์ ๊ฐ์ ์ฃผ์
๊ณต๊ฒฉ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์
์ฉํฉ๋๋ค.
ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS)
XSS ๊ณต๊ฒฉ์ ์
์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์น์ฌ์ดํธ์ ์ฃผ์
๋์ด ์ฌ์ฉ์๊ฐ ์์ฌํ์ง ์๊ณ ์คํ๋ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ์
๋ ฅ์ด ํ์ด์ง์ ํ์๋๊ธฐ ์ ์ ์ ๋๋ก Sanitize๋์ง ์์ ๋ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๋๊ธ ์์์ <script>alert('XSS')</script>๋ฅผ ์
๋ ฅํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด Sanitize ์์ด ์ด ๋๊ธ์ ๋ ๋๋งํ๋ฉด, ์คํฌ๋ฆฝํธ๊ฐ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ด ๊ณต๊ฒฉ์๊ฐ ์ฟ ํค๋ฅผ ํ์น๊ฑฐ๋ ์ฌ์ฉ์๋ฅผ ์
์ฑ ์น์ฌ์ดํธ๋ก ๋ฆฌ๋๋ ์
ํ๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ๋ณ์กฐํ ์ ์์ต๋๋ค.
์์ (์ทจ์ฝํ ์ฝ๋):
function Comment({ comment }) {
return <div>{comment}</div>;
}
์ด ์์ ์์ comment์ ์
์ฑ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ์คํ๋ฉ๋๋ค. experimental_taintUniqueValue๋ comment ๊ฐ์ ์ค์ผ๋ ๊ฒ์ผ๋ก ํ์ํ๊ณ ์ง์ ๋ ๋๋ง์ ๋ฐฉ์งํจ์ผ๋ก์จ ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์๋ฒ ์ธก ์์ฒญ ์์กฐ(SSRF)
SSRF ๊ณต๊ฒฉ์ ๊ณต๊ฒฉ์๊ฐ ์๋ฒ๋ฅผ ์๋ํ์ง ์์ ์์น๋ก ์์ฒญํ๋๋ก ์ ๋ํ ์ ์์ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ณต๊ฒฉ์๋ ๋ด๋ถ ๋ฆฌ์์ค์ ์ก์ธ์คํ๊ฑฐ๋ ๋ฐฉํ๋ฒฝ์ ์ฐํํ๊ฑฐ๋ ์๋ฒ๋ฅผ ๋์ ํ์ฌ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ URL์ ์ง์ ํ ์ ์๊ฒ ํ๋ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ ๋ด๋ถ URL(์: http://localhost/admin)์ ์ง์ ํ์ฌ ๋ฏผ๊ฐํ ์ ๋ณด ๋๋ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
experimental_taintUniqueValue๋ SSRF๋ฅผ ์ง์ ์ ์ผ๋ก ๋ฐฉ์งํ์ง๋ ์์ง๋ง, URL์ ์ถ์ฒ๋ฅผ ์ถ์ ํ๊ณ ์๋ฒ๊ฐ ์ค์ผ๋ URL๋ก ์์ฒญํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, URL์ด ์ฌ์ฉ์ ์
๋ ฅ์์ ํ์๋ ๊ฒฝ์ฐ ์ค์ผ๋ ์ ์์ผ๋ฉฐ, ์๋ฒ๋ ์ค์ผ๋ URL๋ก ์์ฒญ์ ๊ฑฐ๋ถํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
experimental_taintUniqueValue ์๋ ๋ฐฉ์
experimental_taintUniqueValue๋ ๊ฐ์ "taint"๋ฅผ ์ฐ๊ฒฐํ์ฌ ์๋ํฉ๋๋ค. ์ด taint๋ ํ๋๊ทธ ์ญํ ์ ํ์ฌ ํด๋น ๊ฐ์ ์ฃผ์ํด์ ์ฒ๋ฆฌํด์ผ ํจ์ ๋ํ๋
๋๋ค. ๊ทธ๋ฐ ๋ค์ React๋ ๊ฐ์ด ์ค์ผ๋์๋์ง ํ์ธํ๊ณ ๋ฏผ๊ฐํ ๋งฅ๋ฝ์์ ์ค์ผ๋ ๊ฐ์ Sanitizeํ๊ฑฐ๋ ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
experimental_taintUniqueValue์ ํน์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ ์คํ์ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ์์น์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ ์ฌ์ ์ผ๋ก ์์ ํ์ง ์์ ๊ฐ์ ํ์ํ๊ณ ๋ณด์ ์ํ์ ์ด๋ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ ๋ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํฉ๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ ์์
๋ค์ ์์ ๋ experimental_taintUniqueValue์ ๊ธฐ๋ณธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ณด์ฌ์ค๋๋ค.
import { experimental_taintUniqueValue } from 'react';
function processUserInput(userInput) {
// ์ ์ฌ์ ์ผ๋ก ์
์ฑ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์
๋ ฅ์ Sanitizeํฉ๋๋ค.
const sanitizedInput = sanitize(userInput);
// ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์์ ๋์์์ ๋ํ๋ด๊ธฐ ์ํด Sanitize๋ ์
๋ ฅ์ ์ค์ผ์ํต๋๋ค.
const taintedInput = experimental_taintUniqueValue(sanitizedInput, 'user input');
return taintedInput;
}
function renderComment({ comment }) {
// ๋๊ธ์ด ์ค์ผ๋์๋์ง ํ์ธํฉ๋๋ค.
if (isTainted(comment)) {
// ๋๊ธ์ Sanitizeํ๊ฑฐ๋ ๋ ๋๋ง์ ๋ฐฉ์งํฉ๋๋ค.
const safeComment = sanitize(comment);
return <div>{safeComment}</div>;
} else {
return <div>{comment}</div>;
}
}
// Sanitize ๋ฐ taint ํ์ธ์ ์ํ ์๋ฆฌ ํ์์ ํจ์.
function sanitize(input) {
// ์ฌ๊ธฐ์ Sanitize ๋ก์ง์ ๊ตฌํํ์ธ์.
// HTML ํ๊ทธ ์ ๊ฑฐ, ํน์ ๋ฌธ์ ์ด์ค์ผ์ดํ ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
return input.replace(/<[^>]*>/g, ''); // ์: HTML ํ๊ทธ ์ ๊ฑฐ
}
function isTainted(value) {
// ์ฌ๊ธฐ์ taint ํ์ธ ๋ก์ง์ ๊ตฌํํ์ธ์.
// experimental_taintUniqueValue๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ด ์ค์ผ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
// ์ด๊ฒ์ ์๋ฆฌ ํ์์์ด๋ฉฐ React๊ฐ taint ์ ๋ณด๋ฅผ ๋
ธ์ถํ๋ ๋ฐฉ์์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ taint ํ์ธ ๋ก์ง์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค.
return false; // ์ค์ taint ํ์ธ ๋ก์ง์ผ๋ก ๋์ฒด
}
์ค๋ช :
processUserInputํจ์๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ Sanitizeํ ํexperimental_taintUniqueValue๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ผ์ํต๋๋ค.experimental_taintUniqueValue์ ๋ ๋ฒ์งธ ์ธ์๋ taint์ ๋ํ ์ค๋ช ์ผ๋ก, ๋๋ฒ๊น ๋ฐ ๊ฐ์ฌ์ ์ ์ฉํ ์ ์์ต๋๋ค.renderCommentํจ์๋comment๊ฐ ์ค์ผ๋์๋์ง ํ์ธํฉ๋๋ค. ์ค์ผ๋ ๊ฒฝ์ฐ ๋ ๋๋งํ๊ธฐ ์ ์ ๋๊ธ์ Sanitizeํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ์ฌ์ ์ผ๋ก ์ ์ฑ ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.sanitizeํจ์๋ Sanitize ๋ก์ง์ ๋ํ ์๋ฆฌ ํ์์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ํจ์๋ ์ ์ฌ์ ์ผ๋ก ์ ํดํ ๋ฌธ์ ๋๋ ๋งํฌ์ ์ ์ ๋ ฅ์์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.isTaintedํจ์๋ ๊ฐ์ด ์ค์ผ๋์๋์ง ํ์ธํ๊ธฐ ์ํ ์๋ฆฌ ํ์์์ ๋๋ค. ์ด ํจ์๋ React๊ฐ taint ์ ๋ณด๋ฅผ ๋ ธ์ถํ๋ ๋ฐฉ์(API๊ฐ ์คํ์ ์ด๋ฏ๋ก ๋ณ๊ฒฝ๋ ์ ์์)์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์ด์ผ ํฉ๋๋ค.
experimental_taintUniqueValue ์ฌ์ฉ์ ์ด์
- ํฅ์๋ ๋ณด์: ๋ฐ์ดํฐ ์ถ์ฒ๋ฅผ ์ถ์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ํด์ ์ฒ๋ฆฌ๋๋๋ก ํ์ฌ XSS, SSRF ๋ฐ ๊ธฐํ ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ํฅ์๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ๊ณ ์์๋๊ฑฐ๋ ๋ณ์กฐ๋ ๋ฐ์ดํฐ์ ์ฌ์ฉ์ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
- ์ค์ ์ง์ค์ ๋ณด์ ์ ์ฑ ์ํ: ๋ณด์ ์ ์ฑ ์ ์ค์ ์ง์ค์ ์์น์์ ์ ์ํ๊ณ ์ํํ ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๋ณด์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค.
- ๊ณต๊ฒฉ ํ๋ฉด ๊ฐ์: ์ฑ๊ณต์ ์ธ ์ฃผ์
๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ์ ์ค์์ผ๋ก์จ
experimental_taintUniqueValue๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต๊ฒฉ ํ๋ฉด์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. - ์ฆ๊ฐ๋ ์ ๋ขฐ๋: ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ ์ฒ๋ฆฌ๋๊ณ ์๋ค๋ ๊ฒ์ ์๋ฉด์ ๊ฐ๋ฐ์์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ๋ํ ๋ ํฐ ํ์ ์ ์ ๊ณตํฉ๋๋ค.
๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
experimental_taintUniqueValue๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ๊ทธ ํ๊ณ๋ฅผ ์ธ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์
๋๋ค.
- Sanitize๋ ์ฌ์ ํ ์ค์ํฉ๋๋ค:
experimental_taintUniqueValue๋ ์ ์ ํ Sanitize๋ฅผ ๋์ฒดํ๋ ๊ฒ์ด ์๋๋๋ค. ์ ์ฌ์ ์ผ๋ก ์ ํดํ ๋ฌธ์ ๋๋ ๋งํฌ์ ์ ์ ๊ฑฐํ๊ธฐ ์ํด ํญ์ ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ ๊ธฐํ ์ธ๋ถ ๋ฐ์ดํฐ ์์ค๋ฅผ Sanitizeํด์ผ ํฉ๋๋ค. - Taint ์ ํ ์ดํด: Taint๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํด ์ ํ๋๋ ๋ฐฉ์์ ์ธ์งํ์ธ์. ๊ฐ์ด ์ค์ผ๋ ๊ฐ์์ ํ์๋ ๊ฒฝ์ฐ ํ์๋ ๊ฐ๋ ์ค์ผ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์ผ ํฉ๋๋ค.
- ์ค๋ช ์ ์ธ Taint ์ค๋ช ์ฌ์ฉ: ๋๋ฒ๊น ๋ฐ ๊ฐ์ฌ์ ๋์์ด ๋๋๋ก ๋ช ํํ๊ณ ์ค๋ช ์ ์ธ Taint ์ค๋ช ์ ์ ๊ณตํ์ธ์. ์ค๋ช ์ Taint์ ์ถ์ฒ์ ๊ด๋ จ ์ปจํ ์คํธ๋ฅผ ๋ํ๋ด์ผ ํฉ๋๋ค.
- ์ค์ผ๋ ๊ฐ ์ ์ ํ๊ฒ ์ฒ๋ฆฌ: ์ค์ผ๋ ๊ฐ์ ๋ฐ๊ฒฌํ๋ฉด ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ์ธ์. ์ฌ๊ธฐ์๋ ๊ฐ Sanitize, ๋ ๋๋ง ๋ฐฉ์ง ๋๋ ์์ฒญ ๊ฑฐ๋ถ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
- ์ต์ ์ ๋ณด ์ ์ง:
experimental_taintUniqueValue๋ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฏ๋ก API ๋ฐ ๋์์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ต์ React ๋ฌธ์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ์ ๋ฐ๋ผ๊ฐ์ธ์. - ํ
์คํธ:
experimental_taintUniqueValue๊ฐ ์์๋๋ก ์๋ํ๊ณ ์ค์ผ๋ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋์ง ํ์ธํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ธ์. ๋ค์ํ ์๋๋ฆฌ์ค๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ๋จ์ ํ ์คํธ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ํฌํจํ์ธ์.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ์ฉ ์ฌ๋ก
experimental_taintUniqueValue์ ์ค์ ์ ์ฉ์ ๋ ์์ธํ ์ค๋ช
ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด ์ ํ ๋ฆฌ๋ทฐ, ๊ฒ์ ์ฟผ๋ฆฌ ๋ฐ ๊ฒฐ์ ์์๊ณผ ๊ฐ์ ๋ค์ํ ๊ณณ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ์ฌ์ ์ผ๋ก ์ ๋ขฐํ ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
- ์ ํ ๋ฆฌ๋ทฐ: ์ฌ์ฉ์๊ฐ ์ ํ ๋ฆฌ๋ทฐ๋ฅผ ์ ์ถํ ๋ ์ ์ฑ HTML ๋๋ JavaScript ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋๋ก ์ ๋ ฅ์ Sanitizeํด์ผ ํฉ๋๋ค. Sanitize๋ ๋ฆฌ๋ทฐ๋ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์์ ๋์์์ ๋ํ๋ด๊ธฐ ์ํด ์ค์ผ๋์ด์ผ ํฉ๋๋ค. ์ ํ ํ์ด์ง์ ๋ฆฌ๋ทฐ๋ฅผ ๋ ๋๋งํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ๋ทฐ๊ฐ ์ค์ผ๋์๋์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ค์ Sanitizeํด์ผ ํฉ๋๋ค.
- ๊ฒ์ ์ฟผ๋ฆฌ: ์ฌ์ฉ์ ๊ฒ์ ์ฟผ๋ฆฌ๋ XSS ์ทจ์ฝ์ ์ ์์ค๊ฐ ๋ ์ ์์ต๋๋ค. ๊ฒ์ ์ฟผ๋ฆฌ๋ Sanitize ๋ฐ ์ค์ผ๋์ด์ผ ํฉ๋๋ค. ๋ฐฑ์๋๋ ๋์ ์ผ๋ก ๊ตฌ์ฑ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์ ๊ฐ์ ์ค์ผ๋ ๊ฒ์์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฌ์ ์ผ๋ก ์ํํ ์์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด Taint ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ฒฐ์ ์์: ์ ์ฉ ์นด๋ ๋ฒํธ ๋ฐ ์ฃผ์์ ๊ฐ์ ๊ฒฐ์ ์์์ ์
๋ ฅ๋ ๋ฐ์ดํฐ๋ ๊ทน๋๋ก ์ฃผ์ํด์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
experimental_taintUniqueValue๊ฐ ์ด ๊ฒฝ์ฐ ๋ชจ๋ ์ ํ์ ์ทจ์ฝ์ ์ ์ง์ ์ ์ผ๋ก ๋ฐฉ์งํ์ง๋ ๋ชปํ์ง๋ง(์ ์ฑ ์ฝ๋ ๋ ๋๋ง ๋ฐฉ์ง์ ๋ ์ค์ ์ ๋๊ธฐ ๋๋ฌธ์), ์ด ๋ฐ์ดํฐ์ ์ถ์ฒ๋ฅผ ์ถ์ ํ๊ณ ๊ฒฐ์ ํ๋ก์ธ์ค ์ ๋ฐ์ ๊ฑธ์ณ ์์ ํ๊ฒ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํ๋ ๋ฐ ์ฌ์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ํธํ ๋ฐ ํ ํฐํ์ ๊ฐ์ ๋ค๋ฅธ ๋ณด์ ์กฐ์น๋ ํ์์ ์ ๋๋ค.
์์ ๋ฏธ๋์ด ํ๋ซํผ
์์
๋ฏธ๋์ด ํ๋ซํผ์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ํ์๋๋ ์ฝํ
์ธ ๋ฅผ ๊ฒ์ํ ์ ์์ผ๋ฏ๋ก XSS ๊ณต๊ฒฉ์ ํนํ ์ทจ์ฝํฉ๋๋ค. experimental_taintUniqueValue๋ ๋ชจ๋ ์ฌ์ฉ์ ์์ฑ ์ฝํ
์ธ ๋ฅผ ์ค์ผ์์ผ ์ด๋ฌํ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ฒ์๋ฌผ ๋ฐ ๋๊ธ: ์ฌ์ฉ์๊ฐ ๋ฉ์์ง๋ ๋๊ธ์ ๊ฒ์ํ ๋ ์ ๋ ฅ์ Sanitize ๋ฐ ์ค์ผ๋์ด์ผ ํฉ๋๋ค. ๊ฒ์๋ฌผ ๋๋ ๋๊ธ์ ๋ ๋๋งํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ผ๋์๋์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ค์ Sanitizeํด์ผ ํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํ๋ซํผ์ ์ ์ฑ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ํ๋กํ ์ ๋ณด: ์ด๋ฆ, ์๊ฐ ๋ฐ ์น์ฌ์ดํธ์ ๊ฐ์ ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด๋ XSS ์ทจ์ฝ์ ์ ์์ค๊ฐ ๋ ์ ์์ต๋๋ค. ์ด ์ ๋ณด๋ Sanitize ๋ฐ ์ค์ผ๋์ด์ผ ํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋๋งํ๊ธฐ ์ ์ ์ค์ผ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
- ์ง์ ๋ฉ์์ง: ์ง์ ๋ฉ์์ง๋ ์ผ๋ฐ์ ์ผ๋ก ๋น๊ณต๊ฐ์ด์ง๋ง XSS ๊ณต๊ฒฉ์ ๋ฒกํฐ๊ฐ ๋ ์ ์์ต๋๋ค. ์ ์ฑ ์ฝํ ์ธ ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ง์ ๋ฉ์์ง์๋ ๋์ผํ Sanitize ๋ฐ ์ค์ผ ์์น์ ์ ์ฉํด์ผ ํฉ๋๋ค.
์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (CMS)
CMS ํ๋ซํผ์ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ ์ฝํ
์ธ ๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ์ฝํ
์ธ ์๋ ํ
์คํธ, ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. experimental_taintUniqueValue๋ ๋ชจ๋ ์ฌ์ฉ์ ์์ฑ ์ฝํ
์ธ ๋ฅผ ์ค์ผ์์ผ XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ธฐ์ฌ ๋ฐ ํ์ด์ง: ์ฌ์ฉ์๊ฐ ๊ธฐ์ฌ ๋๋ ํ์ด์ง๋ฅผ ๋ง๋ค ๋ ์ ๋ ฅ์ Sanitize ๋ฐ ์ค์ผ๋์ด์ผ ํฉ๋๋ค. ๊ธฐ์ฌ ๋๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ผ๋์๋์ง ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ค์ Sanitizeํด์ผ ํฉ๋๋ค.
- ํ ํ๋ฆฟ ๋ฐ ํ ๋ง: CMS ํ๋ซํผ์ ์ข ์ข ์ฌ์ฉ์ ์ ์ ํ ํ๋ฆฟ ๋ฐ ํ ๋ง๋ฅผ ์ ๋ก๋ํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ํ ํ๋ฆฟ ๋ฐ ํ ๋ง๋ ์ ๋๋ก Sanitize๋์ง ์์ ๊ฒฝ์ฐ XSS ์ทจ์ฝ์ ์ ์๋นํ ์์ค๊ฐ ๋ ์ ์์ต๋๋ค. CMS ํ๋ซํผ์ ํ ํ๋ฆฟ ๋ฐ ํ ๋ง์ ๋ํ ์๊ฒฉํ Sanitize ๋ฐ ์ค์ผ ์ ์ฑ ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
- ํ๋ฌ๊ทธ์ธ ๋ฐ ํ์ฅ ํ๋ก๊ทธ๋จ: ํ๋ฌ๊ทธ์ธ ๋ฐ ํ์ฅ ํ๋ก๊ทธ๋จ๋ ๋ณด์ ์ํ์ ์ด๋ํ ์ ์์ต๋๋ค. CMS ํ๋ซํผ์ ํ๋ฌ๊ทธ์ธ ๋ฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ณด์์ ํ์ธํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ฝ๋ ์คํ์ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
experimental_taintUniqueValue์ ๋ค๋ฅธ ๋ณด์ ๊ธฐ์ ๋น๊ต
experimental_taintUniqueValue๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ง์ ๋ณด์ ๊ธฐ์ ์ค ํ๋์ผ ๋ฟ์
๋๋ค. ๊ธฐํ ์ผ๋ฐ์ ์ธ ๊ธฐ์ ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ์ ๋ ฅ Sanitize: ์ฌ์ฉ์ ์ ๋ ฅ์์ ์ ์ฌ์ ์ผ๋ก ์ ํดํ ๋ฌธ์ ๋๋ ๋งํฌ์ ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ด์ค์ผ์ดํํฉ๋๋ค.
- ์ถ๋ ฅ ์ธ์ฝ๋ฉ: ์ฝ๋๋ก ํด์๋์ง ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ ์ ์ธ์ฝ๋ฉํฉ๋๋ค.
- ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP): ์น์ฌ์ดํธ๊ฐ ๋ก๋ํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ ์ดํ ์ ์๊ฒ ํด์ฃผ๋ ๋ธ๋ผ์ฐ์ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ์ ๊ธฐ ๋ณด์ ๊ฐ์ฌ: ์ ์ฌ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋ ๋ฐ ์ธํ๋ผ์ ๋ํ ์ฃผ๊ธฐ์ ์ธ ๊ฒํ ์ ๋๋ค.
experimental_taintUniqueValue๋ ๋ฐ์ดํฐ ์ถ์ฒ๋ฅผ ์ถ์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ํด์ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํจ์ผ๋ก์จ ์ด๋ฌํ ๊ธฐ์ ์ ๋ณด์ํฉ๋๋ค. Sanitize, ์ถ๋ ฅ ์ธ์ฝ๋ฉ ๋๋ ๊ธฐํ ๋ณด์ ์กฐ์น์ ํ์์ฑ์ ๋์ฒดํ์ง๋ ์์ง๋ง, ํจ๊ณผ๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
experimental_taintUniqueValue์ ๋ฏธ๋
experimental_taintUniqueValue๋ ํ์ฌ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋ฏธ๋๋ ๋ถํ์คํฉ๋๋ค. ๊ทธ๋ฌ๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด์์ ๊ฐํํ ์ ์ฌ๋ ฅ์ ์๋นํฉ๋๋ค. React ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ ๊ฒฝํ์ ๋ ๋ง์ด ์์ผ๋ฉด์ experimental_taintUniqueValue์ API ๋ฐ ๋์์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
React ํ์ experimental_taintUniqueValue์ ๋ํ ์ปค๋ฎค๋ํฐ์ ํผ๋๋ฐฑ์ ์ ๊ทน์ ์ผ๋ก ์ฐพ๊ณ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ ๊ธฐ์ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด React GitHub ์ ์ฅ์์ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
experimental_taintUniqueValue๋ React์ ์ ๋งํ ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ฃผ์
๊ณต๊ฒฉ๊ณผ ๊ด๋ จ๋ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ ์ฌ์ ์ผ๋ก ์์ ํ์ง ์์ ๊ฐ์ ์ค์ผ์ํค๊ณ ์ฃผ์ํด์ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ experimental_taintUniqueValue๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด์์ ํฌ๊ฒ ๊ฐํํ ์ ์์ต๋๋ค.
experimental_taintUniqueValue๊ฐ ๋ง๋ณํต์น์ฝ์ ์๋์ง๋ง, ๋ค๋ฅธ ๋ณด์ ๊ธฐ์ ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ท์คํ ๋๊ตฌ์
๋๋ค. ๊ธฐ๋ฅ์ด ์ฑ์ํ๊ณ ๋ ๋๋ฆฌ ์ฑํ๋จ์ ๋ฐ๋ผ React ์ ํ๋ฆฌ์ผ์ด์
๋ณด์์์ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋ณด์์ ์ง์์ ์ธ ๊ณผ์ ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ต์ ๋ณด์ ์ํ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์กฐ์น๋ฅผ ์ง์์ ์ผ๋ก ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํ์ธ์.
์คํ ๊ฐ๋ฅํ ์ธ์ฌ์ดํธ
- React ํ๋ก์ ํธ์์
experimental_taintUniqueValue๋ฅผ ์คํํด ๋ณด์ธ์. API์ ์ต์ํด์ง๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ๊ฐํํ๋ ๋ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ํ์ํ์ธ์. - React ํ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ธ์.
experimental_taintUniqueValue์ฌ์ฉ ๊ฒฝํ์ ๊ณต์ ํ๊ณ ๊ฐ์ ์ฌํญ์ ์ ์ํ์ธ์. - ์ต์ ๋ณด์ ์ํ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์กฐ์น๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํ์ธ์.
- ํฌ๊ด์ ์ธ ๋ณด์ ์ ๋ต์ ๊ตฌํํ์ธ์. ์
๋ ฅ Sanitize, ์ถ๋ ฅ ์ธ์ฝ๋ฉ ๋ฐ CSP์ ๊ฐ์ ๋ค๋ฅธ ๋ณด์ ๊ธฐ์ ๊ณผ ํจ๊ป
experimental_taintUniqueValue๋ฅผ ์ฌ์ฉํ์ธ์. - ๊ฐ๋ฐ ํ ๋ด์์ ๋ณด์ ์ธ์ ์ฆ์ง. ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋ณด์์ ์ค์์ฑ์ ์ดํดํ๊ณ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ต์ก์ ๋ฐ์๋์ง ํ์ธํ์ธ์.