原型污染为什么常出现在动态属性赋值和深合并中?
参考答案
当攻击者能控制对象属性路径,代码又沿着该路径访问并赋值时,可能写到共享原型上。常见入口包括 proto,以及 constructor.prototype 等路径,结果会影响后续通过继承查找属性的其他对象。
JSON.parse 读入一个名为 proto 的键本身并不等于已经污染全局原型;风险往往在后续赋值、深合并或递归路径处理时发生。因此不能只检查输入是不是合法 JSON。
应按业务字段白名单校验输入,避免把任意路径写入普通对象,使用安全维护的合并工具。字典场景可考虑 Map 或无原型对象,读取时明确是否只接受自身属性。单独屏蔽 proto 不是完整防线,仍要检查其他原型访问路径以及已有污染的利用点。