You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数与普通对象间Prototype pollution的不对称性及反向污染可行性

函数与普通对象的原型污染不对称性分析

函数与"普通"1对象之间的原型污染存在明显不对称性,示例代码如下:

var a = {}
function foo(){}

a.__proto__.something = 32;
foo.__proto__.bar = 67;

console.log(a.bar) // <--- 未被污染
console.log(foo.something) // <--- 已被污染

现象解释

  • a.__proto__指向Object.prototype,给它添加something属性后,所有继承自Object.prototype的对象都会共享该属性。由于Function.prototype本身是Object的实例(原型链指向Object.prototype),因此函数foo能访问到something。
  • foo.__proto__指向Function.prototype,给它添加bar属性后,只有函数类型的对象会继承该属性。普通对象的原型链仅延伸至Object.prototype,不会触及Function.prototype,因此a无法访问bar。

问题解答:函数能否污染普通对象?

不能直接通过修改函数的__proto__来污染普通对象。原因如下:

  • 普通对象的原型链为普通对象 → Object.prototype → null,不包含Function.prototype;
  • 修改Function.prototype的属性只会影响所有函数,普通对象无法获取这些属性。

如果通过foo.__proto__.__proto__(即Object.prototype)添加属性,本质上还是修改了Object.prototype,这和直接修改普通对象的__proto__效果一致,但不属于“函数污染普通对象”的特有场景。

1 关于“普通对象”的术语目前尚未达成共识


内容的提问来源于Stack Exchange,提问作者OrenIshShalom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:52:27