Reactμ μ€νμ APIμΈ experimental_taintObjectReferenceμ μ¬μ© μ¬λ‘, μ΄μ , νκ³ λ° μΉ μ ν리μΌμ΄μ μ κ°μ²΄ 보μμ λ―ΈμΉλ μν₯μ μ΄ν΄λ³΄μΈμ. κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) μ·¨μ½μ μΌλ‘λΆν° μ ν리μΌμ΄μ μ 보νΈνλ λ°©λ²μ μμ보μΈμ.
React experimental_taintObjectReference ꡬν: κ°μ²΄ 보μ μ¬μΈ΅ λΆμ
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ 보μμ μ¬μ ν κ°μ₯ μ€μν κ΄μ¬μ¬μ
λλ€. μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μν μΈκΈ° μλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬μΈ Reactλ μ±λ₯κ³Ό 보μμ λͺ¨λ ν₯μμν€κΈ° μν΄ μ§μμ μΌλ‘ μλ‘μ΄ κΈ°λ₯κ³Ό APIλ₯Ό λμ
νκ³ μμ΅λλ€. κ·Έλ¬ν μ€νμ κΈ°λ₯ μ€ νλκ° experimental_taintObjectReferenceμ
λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ μ΄ APIμ λͺ©μ , ꡬν, μ΄μ , νκ³ λ° React μ ν리μΌμ΄μ
λ΄ κ°μ²΄ 보μμ λ―ΈμΉλ μν₯μ λν΄ μ΄ν΄λ³΄λ©° ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡ν©λλ€.
experimental_taintObjectReferenceλ 무μμΈκ°?
experimental_taintObjectReferenceλ κ°λ°μκ° React μ»΄ν¬λνΈ λ΄μμ μ μ¬μ μΌλ‘ μμ νμ§ μμ λ°μ΄ν°μ μ¬μ©μ μΆμ νκ³ λ°©μ§ν¨μΌλ‘μ¨ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν
(XSS) μ·¨μ½μ μ μννλ λ° λμμ μ£ΌκΈ° μν΄ Reactμ λμ
λ μ€νμ μΈ APIμ
λλ€. λ³Έμ§μ μΌλ‘, μ΄λ κ°μ²΄λ₯Ό "μ€μΌ(taint)"μμΌ μ λ’°ν μ μλ λ°μ΄ν°λ₯Ό ν¬ν¨ν μ μμμ νμν μ μκ² ν©λλ€. μ΄ "μ€μΌ"μ μ ν리μΌμ΄μ
μ ν΅ν΄ μ νλλ©°, μ€μΌλ κ°μ²΄κ° XSSλ‘ μ΄μ΄μ§ μ μλ λ°©μμΌλ‘ μ¬μ©λ κ²½μ° κ²½κ³ λ μ€λ₯λ₯Ό λ°μμν΅λλ€.
μ΄λ μ ν리μΌμ΄μ μμ μ€μ μ·¨μ½μ μΌλ‘ λνλκΈ° μ μ μ μ¬μ μΈ λ³΄μ λ¬Έμ λ₯Ό ν¬μ°©νλλ‘ μ€κ³λ μμ λ§μ΄λΌκ³ μκ°ν μ μμ΅λλ€. μ΄λ μμ€ν μ ν΅ν΄ μ μ¬μ μΌλ‘ μ μμ μΈ λ°μ΄ν°μ νλ¦μ μΆμ νκΈ° μν΄ λ³΄μ λΆμμμ λ리 μ¬μ©λλ κΈ°μ μΈ μ€μΌ μΆμ (taint tracking) κ°λ μ νμ©ν©λλ€.
Reactμμ κ°μ²΄ 보μμ΄ μ€μν μ΄μ
React μ ν리μΌμ΄μ μ μΈλΆ μμ€λ μ¬μ©μ μ λ ₯μμ κ°μ Έμ¨ λ°μ΄ν°λ₯Ό νμνλ λ± λμ μΈ κ²½μ°κ° λ§μ΅λλ€. μ΄ λ°μ΄ν°κ° μ λλ‘ μλνμ΄μ¦(sanitize)λκ±°λ κ²μ¦λμ§ μμ κ²½μ° μ μμ μΌ μ μμ΅λλ€. XSS 곡격μ 곡격μκ° μ ν리μΌμ΄μ μ΄ μ¬μ©μ μ 곡 λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ°©μμ μ·¨μ½μ μ μ΄μ©νμ¬ μ μ± μ€ν¬λ¦½νΈλ₯Ό μ ν리μΌμ΄μ μ μ£Όμ ν λ λ°μν©λλ€. μ΄λ¬ν μ€ν¬λ¦½νΈλ μ¬μ©μ μ격 μ¦λͺ μ νμΉκ±°λ, μ¬μ©μλ₯Ό μ μ± μΉμ¬μ΄νΈλ‘ 리λλ μ νκ±°λ, μ ν리μΌμ΄μ μ νΌμν μ μμ΅λλ€.
XSSλ₯Ό λ°©μ§νλ μ ν΅μ μΈ λ°©λ²μλ μ’
μ’
μ¬μ©μ μ
λ ₯ μλνμ΄μ¦ λ° μΆλ ₯ μ΄μ€μΌμ΄ν(escape)κ° ν¬ν¨λ©λλ€. μ΄λ¬ν κΈ°μ μ ν¨κ³Όμ μ΄μ§λ§, μ€λ₯κ° λ°μνκΈ° μ½κ³ λκ·λͺ¨ μ½λλ² μ΄μ€ μ 체μ μΌκ΄λκ² μ μ©νκΈ° μ΄λ €μΈ μ μμ΅λλ€. experimental_taintObjectReferenceλ μ μ¬μ μΌλ‘ μμ νμ§ μμ λ°μ΄ν°λ₯Ό λͺ
μμ μΌλ‘ νμνμ¬ XSS μ·¨μ½μ μ λ μ½κ² μλ³νκ³ λ°©μ§ν μ μλλ‘ μΆκ°μ μΈ λ³΄νΈ κ³μΈ΅μ μ 곡ν©λλ€.
experimental_taintObjectReference μλ λ°©μ: μ€μ μμ
κ°λ¨ν μμ λ₯Ό ν΅ν΄ React μ ν리μΌμ΄μ
μμ experimental_taintObjectReferenceλ₯Ό μ΄λ»κ² μ¬μ©ν μ μλμ§ μ€λͺ
ν΄ λ³΄κ² μ΅λλ€. μΈλΆ APIμμ κ°μ Έμ¨ μ¬μ©μμ μ½λ ₯μ ν¬ν¨νμ¬ νλ‘νμ νμνλ μ»΄ν¬λνΈκ° μλ€κ³ μμν΄ λ³΄μΈμ.
1λ¨κ³: λ°μ΄ν° μ€μΌμν€κΈ°
APIμμ μ¬μ©μ μ½λ ₯μ κ°μ Έμ¬ λ experimental_taintObjectReferenceλ₯Ό μ¬μ©νμ¬ μ μ¬μ μΌλ‘ μμ νμ§ μλ€κ³ νμν μ μμ΅λλ€. μ΄λ μΌλ°μ μΌλ‘ λ°μ΄ν°κ° μΈλΆ μμ€μμ μ ν리μΌμ΄μ
μΌλ‘ λ€μ΄μ¬ λ μνλ©λλ€.
import { experimental_taintObjectReference } from 'react';
async function fetchUserBio(userId) {
const response = await fetch(`/api/users/${userId}`);
const data = await response.json();
// bio μμ±μ μ€μΌμν΅λλ€
experimental_taintObjectReference('user.bio', 'μ μ¬μ μΌλ‘ μμ νμ§ μμ μ¬μ©μ μ 곡 λ°μ΄ν°', data, 'bio');
return data;
}
μ΄ μμ μμλ experimental_taintObjectReferenceλ₯Ό μ¬μ©νμ¬ data κ°μ²΄μ bio μμ±μ μ€μΌμν€κ³ μμ΅λλ€. 첫 λ²μ§Έ μΈμλ λ¬Έμμ΄ μλ³μ('user.bio'), λ λ²μ§Έλ μ€μΌ μ΄μ λ₯Ό λνλ΄λ μ€λͺ
λ©μμ§('μ μ¬μ μΌλ‘ μμ νμ§ μμ μ¬μ©μ μ 곡 λ°μ΄ν°'), μΈ λ²μ§Έλ μ€μΌμν¬ κ°μ²΄(data), λ€ λ²μ§Έλ μ€μΌμν¬ νΉμ μμ±('bio')μ
λλ€.
2λ¨κ³: μ»΄ν¬λνΈμμ μ€μΌλ λ°μ΄ν° μ¬μ©νκΈ°
μ΄μ μ¬μ©μ μ½λ ₯μ νμνλ μ»΄ν¬λνΈκ° μλ€κ³ κ°μ ν΄ λ΄ μλ€:
function UserProfile({ user }) {
return (
{user.name}
μκ°: {user.bio}
);
}
λ§μ½ user.bioκ° μ€μΌλμλ€λ©΄, Reactλ κ°λ° λͺ¨λμμ μ μ¬μ μΌλ‘ μμ νμ§ μμ λ°μ΄ν°λ₯Ό μ¬μ©νκ³ μλ€λ κ²½κ³ λ₯Ό λ°μμν΅λλ€. μ΄ κ²½κ³ λ λ°μ΄ν°λ₯Ό λ λλ§νκΈ° μ μ μλνμ΄μ¦νκ±°λ μ΄μ€μΌμ΄νν΄μΌ ν¨μ μκΈ°μν€λ μν μ ν©λλ€.
3λ¨κ³: λ°μ΄ν° μλνμ΄μ¦ (DOMPurify μμ )
XSSμ μνμ μννλ €λ©΄ λ λλ§νκΈ° μ μ user.bioλ₯Ό μλνμ΄μ¦ν΄μΌ ν©λλ€. μ΄λ₯Ό μν μΈκΈ° μλ λΌμ΄λΈλ¬λ¦¬ μ€ νλλ DOMPurifyμ
λλ€.
import DOMPurify from 'dompurify';
function UserProfile({ user }) {
const sanitizedBio = DOMPurify.sanitize(user.bio);
return (
{user.name}
);
}
DOMPurifyλ‘ λ°μ΄ν°λ₯Ό μλνμ΄μ¦νλ©΄ μ μ¬μ μΌλ‘ μ μμ μΈ μ€ν¬λ¦½νΈλ HTML νκ·Έλ₯Ό μ κ±°νμ¬ λ λλ§λ μ½ν μΈ κ° μμ νλλ‘ λ³΄μ₯ν©λλ€.
experimental_taintObjectReference μ¬μ©μ μ΄μ
- μ μ¬μ XSS μ·¨μ½μ μ μ‘°κΈ° λ°κ²¬: μ΄ APIλ κ°λ° μ€μ μ μ¬μ μΈ XSS λ¬Έμ κ° νλ‘λμ μ λ°μλκΈ° μ μ μλ³νλ λ° λμμ μ€λλ€.
- μ½λ μ μ§λ³΄μμ± ν₯μ: μ μ¬μ μΌλ‘ μμ νμ§ μμ λ°μ΄ν°λ₯Ό λͺ μμ μΌλ‘ νμν¨μΌλ‘μ¨ κ°λ°μκ° μ½λμ 보μμ ν¨μλ₯Ό λ μ½κ² μ΄ν΄νκ³ μΆλ‘ ν μ μλλ‘ ν©λλ€.
- 보μ μΈμ κ°ν:
experimental_taintObjectReferenceμ μν΄ μμ±λ κ²½κ³ λ κ°λ°μλ€ μ¬μ΄μμ μ μ ν λ°μ΄ν° μ²λ¦¬ λ° μλνμ΄μ¦μ μ€μμ±μ λν μΈμμ λμΌ μ μμ΅λλ€. - μΈμ μ€λ₯ μν κ°μ: μ μ€ν μ½λ© κ΄νμλ λΆκ΅¬νκ³ μ μ¬μ μΈ XSS μ·¨μ½μ μ λμΉκΈ° μ½μ΅λλ€.
experimental_taintObjectReferenceλ μΆκ°μ μΈ λ°©μ΄ κ³μΈ΅μΌλ‘ μμ©νμ¬ κ·Έλ μ§ μμΌλ©΄ λμΉ μ μλ μ€λ₯λ₯Ό μ‘μλ λλ€.
νκ³ λ° κ³ λ € μ¬ν
- μ€νμ μν: μ€νμ APIμ΄λ―λ‘
experimental_taintObjectReferenceλ ν₯ν React λ²μ μμ λ³κ²½λκ±°λ μ κ±°λ μ μμ΅λλ€. λ°λΌμ μ μ€νκ² μ¬μ©ν΄μΌ νλ©° νμν κ²½μ° μ½λλ₯Ό μμ ν μ€λΉκ° λμ΄ μμ΄μΌ ν©λλ€. - κ°λ° λͺ¨λμμλ§ μλ:
experimental_taintObjectReferenceμ μν΄ μμ±λ κ²½κ³ λ μΌλ°μ μΌλ‘ κ°λ° λͺ¨λμμλ§ νμλ©λλ€. μ΄λ μ¬μ ν νλ‘λμ μ½λμμ μ μ ν μλνμ΄μ¦ λ° μ΄μ€μΌμ΄ν κΈ°μ μ ꡬνν΄μΌ ν¨μ μλ―Έν©λλ€. - μ±λ₯ μ€λ²ν€λ: μ€μΌ μΆμ μ μ½κ°μ μ±λ₯ μ€λ²ν€λλ₯Ό μ λ°ν μ μμ§λ§, κ·Έ μν₯μ λ³΄ν΅ λ¬΄μν μ μλ μμ€μ λλ€. κ·Έλ¬λ νΉν μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ μμλ μ΄λ¬ν μ μ¬μ λΉμ©μ μΈμ§νλ κ²μ΄ μ€μν©λλ€.
- κ±°μ§ μμ±(False Positives): κ²½μ°μ λ°λΌ
experimental_taintObjectReferenceλ μ€μ λ‘λ μμ ν λ°μ΄ν°μμλ λΆκ΅¬νκ³ μ μ¬μ μΌλ‘ μμ νμ§ μλ€κ³ νλκ·Έλ₯Ό μ§μ νλ κ±°μ§ μμ±μ μμ±ν μ μμ΅λλ€. μ΄λ₯Ό μ‘°μ¬νκ³ ν΄κ²°νκΈ° μν΄ μΆκ°μ μΈ λ Έλ ₯μ΄ νμν μ μμ΅λλ€. - 볡μ‘μ±:
experimental_taintObjectReferenceλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλ €λ©΄ μ€μΌ μΆμ μμΉκ³Ό μ ν리μΌμ΄μ λ΄ μ λ’°ν μ μλ λ°μ΄ν°μ μ μ¬μ μΆμ²μ λν μΆ©λΆν μ΄ν΄κ° νμν©λλ€.
κΈ°λ³Έ μ¬μ©μ νλ‘νμ λμ΄μλ μ¬μ© μ¬λ‘
μ¬μ©μ νλ‘ν μμ κ° λͺ
νν μκ°λ₯Ό μ 곡νμ§λ§, experimental_taintObjectReferenceλ λ€μν μλ리μ€μ μ μ©ν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μΆκ° μ¬μ© μ¬λ‘μ
λλ€:
- λ§ν¬λ€μ΄ μ½ν
μΈ λ λλ§: μ¬μ©μκ° μ μΆν λ§ν¬λ€μ΄ μ½ν
μΈ λ₯Ό νμν λ XSS 곡격μ λ°©μ§νκΈ° μν΄ λ λλ§λ HTMLμ μλνμ΄μ¦νλ κ²μ΄ μ€μν©λλ€.
experimental_taintObjectReferenceλ μμ λ§ν¬λ€μ΄ λ¬Έμμ΄μ΄ HTMLλ‘ λ³νλκΈ° μ μ μ€μΌμν€λ λ° μ¬μ©λ μ μμ΅λλ€. - URL λ§€κ°λ³μ μ²λ¦¬: URL λ§€κ°λ³μλ μ λ’°ν μ μλ λ°μ΄ν°μ μΌλ°μ μΈ μΆμ²μ
λλ€.
experimental_taintObjectReferenceλ URLμμ μΆμΆλμλ§μ URL λ§€κ°λ³μ κ°μ μ€μΌμν€λ λ° μ¬μ©λ μ μμ΅λλ€. - μΉμμΌ λ°μ΄ν° μ²λ¦¬: μΉμμΌμμ μμ λ λ°μ΄ν°λ μ λ’°ν μ μλ μΆμ²μμ λΉλ‘―λ μ μμΌλ―λ‘ μ£Όμν΄μ λ€λ£¨μ΄μΌ ν©λλ€.
experimental_taintObjectReferenceλ μΉμμΌ λ©μμ§κ° μμ λμλ§μ μ€μΌμν€λ λ° μ¬μ©λ μ μμ΅λλ€. - νμ¬ λΌμ΄λΈλ¬λ¦¬μμ ν΅ν©: μ¬μ©μ μ λ ₯μ μ²λ¦¬νλ νμ¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ κ²½μ°, ν΄λΉ λΌμ΄λΈλ¬λ¦¬μ μ λ¬λλ λ°μ΄ν°λ₯Ό μ€μΌμμΌ μμ νκ² μ²λ¦¬νκ³ μλμ§ νμΈνλ κ²μ κ³ λ €νμμμ€.
- λμ μμ μμ±: μ¬μ©μ μ λ ₯μ΄λ λ°μ΄ν°λ² μ΄μ€ ꡬμ±μ κΈ°λ°μΌλ‘ λμ μΌλ‘ μμμ μμ±νλ μ ν리μΌμ΄μ μ νΉν XSSμ μ·¨μ½ν©λλ€. μ΄λ¬ν μμμ μμ±νλ λ° μ¬μ©λλ κ΅¬μ± λ°μ΄ν°λ₯Ό μ€μΌμν€λ©΄ μ μ¬μ μΈ μ·¨μ½μ μ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
λ€λ₯Έ 보μ κ΄νκ³Ό experimental_taintObjectReference ν΅ν©νκΈ°
experimental_taintObjectReferenceλ λ€λ₯Έ 보μ κ΄νμ λ체νλ κ²μΌλ‘ κ°μ£Όλμ΄μλ μ λ©λλ€. λμ λ€μκ³Ό κ°μ κΈ°μ‘΄ κΈ°μ κ³Ό ν¨κ» μ¬μ©ν΄μΌ ν©λλ€:
- μ λ ₯ μ ν¨μ± κ²μ¬: λͺ¨λ μ¬μ©μ μ λ ₯μ κ²μ¦νμ¬ μμ νμκ³Ό κ°μ λΆν©νλμ§ νμΈν©λλ€. μ΄λ 곡격μκ° μ ν리μΌμ΄μ μ μ μ± λ°μ΄ν°λ₯Ό μ£Όμ νλ κ²μ λ°©μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
- μΆλ ₯ μ΄μ€μΌμ΄ν: λͺ¨λ μΆλ ₯μ DOMμ λ λλ§νκΈ° μ μ μ΄μ€μΌμ΄νν©λλ€. μ΄λ μ¬μ©μμ λΈλΌμ°μ μμ μ μ± μ€ν¬λ¦½νΈκ° μ€νλλ κ²μ λ°©μ§ν©λλ€.
- μ½ν μΈ λ³΄μ μ μ± (CSP): μ½ν μΈ λ³΄μ μ μ± μ ꡬννμ¬ μ ν리μΌμ΄μ μ΄ λ¦¬μμ€λ₯Ό λ‘λν μ μλ μΆμ²λ₯Ό μ νν©λλ€. μ΄λ 곡격μκ° μΈλΆ μΉμ¬μ΄νΈμμ μ μ± μ€ν¬λ¦½νΈλ₯Ό μ£Όμ νλ κ²μ λ°©μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
- μ κΈ°μ μΈ λ³΄μ κ°μ¬: μ ν리μΌμ΄μ μ μ κΈ°μ μΈ λ³΄μ κ°μ¬λ₯Ό μννμ¬ μ μ¬μ μΈ μ·¨μ½μ μ μλ³νκ³ ν΄κ²°ν©λλ€.
- μμ‘΄μ± κ΄λ¦¬: μ ν리μΌμ΄μ μ μμ‘΄μ±μ μ΅μ μνλ‘ μ μ§νμ¬ μ΅μ 보μ ν¨μΉλ₯Ό μ¬μ©νκ³ μλμ§ νμΈν©λλ€.
XSS λ°©μ§μ λν κΈλ‘λ² κ΄μ
XSS μ·¨μ½μ μ μ μΈκ³μ μΈ λ¬Έμ λ‘, μΈν°λ·μ λͺ¨λ κ³³μμ λͺ¨λ μ νκ³Ό κ·λͺ¨μ μΉ μ ν리μΌμ΄μ μ μν₯μ λ―ΈμΉ©λλ€. XSS λ°©μ§μ κΈ°μ μ μΈ μΈ‘λ©΄μ 보νΈμ μ΄μ§λ§, κΈλ‘λ² μ¬μ©μλ₯Ό μν μμ ν μ ν리μΌμ΄μ μ κ°λ°ν λλ λ¬Ένμ , μΈμ΄μ λμμ€λ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μλ₯Ό λ€μ΄:- λ¬Έμ μΈμ½λ©: μ ν리μΌμ΄μ μ΄ UTF-8κ³Ό κ°μ λ€μν λ¬Έμ μΈμ½λ©μ μ¬λ°λ₯΄κ² μ²λ¦¬νμ¬ κ³΅κ²©μκ° μΈμ½λ© κ΄λ ¨ μ·¨μ½μ μ μ μ©νλ κ²μ λ°©μ§ν΄μΌ ν©λλ€.
- νμ§ν: μ ν리μΌμ΄μ μ νμ§νν λ, λ²μλ λ¬Έμμ΄μ μλνμ΄μ¦νμ¬ XSS 곡격μ λ°©μ§νλλ‘ μ£Όμν΄μΌ ν©λλ€. λ²μκ°κ° μμ μ 보μμ ν¨μλ₯Ό μΈμ§νμ§ λͺ»νλ©΄ λΆμ£Όμλ‘ μ·¨μ½μ μ μ λ°ν μ μμ΅λλ€.
- μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ μΈμ΄: μ ν리μΌμ΄μ μ΄ μλμ΄λ νλΈλ¦¬μ΄μ κ°μ΄ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ μΈμ΄λ₯Ό μ§μνλ κ²½μ°, XSS λ°©μ§ λ©μ»€λμ¦μ΄ μ΄λ¬ν μΈμ΄μμλ μ¬λ°λ₯΄κ² μλνλμ§ ν μ€νΈν΄μΌ ν©λλ€.
- λ¬Ένμ λ§₯λ½: μ ν리μΌμ΄μ μ΄ μ¬μ©λ λ¬Ένμ λ§₯λ½μ κ³ λ €νμμμ€. μΌλΆ λ¬ΈνκΆμμλ κ°μΈ μ 보 λ³΄νΈ λ° λ³΄μμ λν΄ λ€λ₯Έ κΈ°λλ₯Ό κ°μ§ μ μμ΅λλ€.
Reactμ κ°μ²΄ 보μμ λ―Έλ
experimental_taintObjectReferenceκ° μμ§ μ€νμ μΈ APIμ΄κΈ°λ νμ§λ§, μ΄λ Reactμ κ°μ²΄ 보μ λΆμΌμμ μ€μν μ§μ μ λνλ
λλ€. Reactκ° κ³μ λ°μ ν¨μ λ°λΌ, XSS μ·¨μ½μ λ° κΈ°ν 보μ μνμ λ°©μ§νκΈ° μν λ μ κ΅ν λꡬμ κΈ°μ μ λ³Ό μ μμ κ²μΌλ‘ κΈ°λλ©λλ€.
κ°λ₯ν λ―Έλ κ°λ° μ¬νμ λ€μκ³Ό κ°μ΅λλ€:
- μ μ λΆμ λꡬμμ ν΅ν©:
experimental_taintObjectReferenceλ₯Ό μ μ λΆμ λꡬμ ν΅ν©νλ©΄ μ μ¬μ μΈ XSS μ·¨μ½μ μ μλ³νλ κ³Όμ μ μλνν μ μμ΅λλ€. - μλ² μ¬μ΄λ λ λλ§ μ§μ:
experimental_taintObjectReferenceλ₯Ό μλ² μ¬μ΄λ λ λλ§κΉμ§ μ§μνλλ‘ νμ₯νλ©΄ κ°λ°μκ° μλ²μμ λ λλ§λλ React μ ν리μΌμ΄μ μ XSS μ·¨μ½μ μ κ°μ§νκ³ λ°©μ§ν μ μμ΅λλ€. - μ±λ₯ ν₯μ: μ€μΌ μΆμ μ μ±λ₯μ μ΅μ ννλ©΄ ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μμ λ μ€μ©μ μΌλ‘ μ¬μ©ν μ μκ² λ κ²μ λλ€.
- λ μΈλΆνλ μ€μΌ μ μ΄: μ€μΌ κ³Όμ μ λν λ μΈλΆνλ μ μ΄λ₯Ό μ 곡νλ©΄ κ°λ°μκ° μ€μΌ μΆμ λ©μ»€λμ¦μ λ―Όκ°λλ₯Ό λ―ΈμΈ μ‘°μ ν μ μμ΅λλ€.
κ²°λ‘
experimental_taintObjectReferenceλ React μ ν리μΌμ΄μ
μ κ°μ²΄ 보μμ κ°ννλ λ° μ μ©ν λꡬμ
λλ€. μ μ¬μ μΌλ‘ μμ νμ§ μμ λ°μ΄ν°λ₯Ό λͺ
μμ μΌλ‘ νμν¨μΌλ‘μ¨ κ°λ°μκ° XSS μ·¨μ½μ μ μλ³νκ³ λ°©μ§νλ λ° λμμ μ€λλ€. μμ§ μ€νμ μΈ APIμ΄μ§λ§, React μνκ³μμ 보μμ μ€μμ±μ΄ 컀μ§κ³ μμμ 보μ¬μ£Όλ©° μΉ κ°λ°μμ κ°μ²΄ 보μμ λ―Έλλ₯Ό μΏλ³Ό μ μκ² ν©λλ€.
experimental_taintObjectReferenceκ° λ§λ³ν΅μΉμ½μ μλλΌλ μ μ κΈ°μ΅νμμμ€. μ΄λ μ
λ ₯ μ ν¨μ± κ²μ¬, μΆλ ₯ μ΄μ€μΌμ΄ν, μ½ν
μΈ λ³΄μ μ μ±
κ³Ό κ°μ λ€λ₯Έ 보μ λͺ¨λ² μ¬λ‘μ ν¨κ» μ¬μ©νμ¬ XSS 곡격μ λν ν¬κ΄μ μΈ λ°©μ΄λ₯Ό μ 곡ν΄μΌ ν©λλ€. κ°λ° κ³Όμ μμ νμ 보μμ μ°μ μνκ³ μ΅μ 보μ μν λ° μν κΈ°μ μ λν μ 보λ₯Ό μ΅μ μνλ‘ μ μ§νμμμ€.
보μ μ°μ μ¬κ³ λ°©μμ μμ©νκ³ experimental_taintObjectReferenceμ κ°μ λꡬλ₯Ό νμ©ν¨μΌλ‘μ¨, μ¬μ©μμ λΉμ¦λμ€λ₯Ό μμ‘΄νλ XSS μ·¨μ½μ μ μνμΌλ‘λΆν° 보νΈνλ λ μμ νκ³ μ λ’°ν μ μλ React μ ν리μΌμ΄μ
μ ꡬμΆν μ μμ΅λλ€.
λ©΄μ± μ‘°ν: μ΄ λΈλ‘κ·Έ κ²μλ¬Όμ μ 보 μ 곡 λͺ©μ μΌλ‘λ§ μμ±λμμΌλ©° μ λ¬Έμ μΈ λ³΄μ μ‘°μΈμ ꡬμ±νμ§ μμ΅λλ€. νΉμ 보μ μꡬ μ¬νμ ν΄κ²°νλ €λ©΄ νμ μ격μ κ°μΆ 보μ μ λ¬Έκ°μ μλ΄νμμμ€.