프로토타입 오염 (Prototype Pollution) - Dynamic access
Prototype Pollution
Last updated
Prototype Pollution
Last updated
// 취약한 동적 key 설정 예시
function setDeepValue(obj, keys, value) {
keys = Array.isArray(keys) ? keys : keys.split('.')
let cur = obj
while (keys.length > 1) {
const key = keys.shift()
// 취약: key가 '__proto__' 등일 때도 그대로 진행
if (!cur[key]) cur[key] = {}
cur = cur[key]
}
cur[keys[0]] = value
}
// setDeepValue(user, ['__proto__', 'isAdmin'], true);// 안전한 동적 key 설정 예시
function setDeepValueSafe(obj, keys, value) {
const blockedKeys = ['__proto__', 'constructor', 'prototype']
keys = Array.isArray(keys) ? keys : keys.split('.')
let cur = obj
while (keys.length > 1) {
const key = keys.shift()
if (blockedKeys.includes(key)) {
throw new Error('위험한 속성명입니다.')
}
if (!cur[key]) cur[key] = {}
cur = cur[key]
}
if (blockedKeys.includes(keys[0])) {
throw new Error('위험한 속성명입니다.')
}
cur[keys[0]] = value
}