文章总结: 本文指出防御原型污染时仅过滤proto存在局限,揭示通过constructor.prototype属性可绕过限制实现原型链污染,并举例说明单次非递归过滤的缺陷,强调需采用更全面的防御策略。 综合评分: 85 文章分类: web安全,漏洞分析
别只盯着 __proto__ 了,constructor 才是原型污染的赏金“后门”
原创
升斗安全XiuXiu 升斗安全XiuXiu
升斗安全
2026年5月13日 08:18 广东
在小说阅读器读本章
去阅读
【文章说明】
- 目的:本文内容仅为网络安全技术研究与教育目的而创作。
- 红线:严禁将本文知识用于任何未授权的非法活动。使用者必须遵守《网络安全法》等相关法律。
- 责任:任何对本文技术的滥用所引发的后果自负,与本公众号及作者无关。
- 免责:内容仅供参考,作者不对其准确性、完整性作任何担保。
阅读即代表您同意以上条款。
作为一名混迹漏洞赏金圈多年的老司机,我见过太多人把“过滤 __proto__”当成银弹,以为只要把这个键删了就万事大吉。今天咱们就来聊聊一个更风骚的绕过姿势,不用 __proto__ 这几个字母,照样能把原型链玩弄于股掌之间。
原型污染:不是只有 __proto__ 才能“开后门”
我们之前聊得最多的方法,就是利用 __proto__ 这个属性直接拿到对象原型。这套拳法实在太过经典,以至于现在很多开发者的防御手段就是一句话:合并数据前,把键名叫 __proto__ 的属性统统干掉。
这种一刀切的思路,其实藏着个大坑。因为在 JavaScript 的世界里,能搞原型污染的路径可不止这一条。就算你把 __proto__ 彻底封死,攻击者照样能找到捷径,做到全程不碰“proto”这个字符串。
要理解这条暗道,得先认识每个对象身上那个老实巴交的 constructor 属性。
constructor 的另一重身份
只要没被刻意改过原型,随便一个对象都有 constructor,它指向创建这个对象的构造函数。比如咱们日常写对象:
let myObjLiteral = {}; // 字面量大法let myObj = new Object(); // 标准构造函数创建
这两种方式搞出来的普通对象,都能通过 constructor 找到它们的“造物主”,也就是Object 构造函数:
myObjLiteral.constructor // function Object(){...}myObj.constructor // function Object(){...}
别忘了,函数在 JavaScript 里也是对象。每个构造函数身上都挂着个 prototype 属性,这个属性指向的,正是所有由它创建的实例共享的那个原型对象。
这就有意思了,咱们换个姿势,照样能摸到 Object.prototype:
myObj.constructor.prototype // 等于 Object.prototypemyString.constructor.prototype // 等于 String.prototypemyArray.constructor.prototype // 等于 Array.prototype
看出来了吗?myObj.constructor.prototype 跟 myObj.__proto__ 指向的是同一个东西。这就好比同一间屋子,你从正门(__proto__)被堵死了,转头却发现旁边还有一扇没上锁的侧门(constructor.prototype)。
逗你玩的过滤:只洗一次怎么够
顺着这个思路,咱们再来看看开发者常犯的另一个毛病:只对字符串做一次清洗,还不递归处理。
假设你拿到的输入 URL 长这样:
vulnerable-website.com/?__pro__proto__to__.gadget=payload
服务器那边的过滤逻辑如果很简单粗暴——只是找到 __proto__ 这个子串然后把它替换成空字符串,并且只执行一次,那乐子就大了。字符串被处理后,内嵌的 __proto__ 被“抠”掉,剩下的部分刚好又拼成了一个完整的 __proto__:
vulnerable-website.com/?__proto__.gadget=payload
一个干干净净、能把恶意属性注入原型链的载荷就这么凭空出现了。这种绕过方式就像剥洋葱,你以为剥掉一层就安全了,结果人家只是往里藏了一层,防不胜防。
防御原型污染,光盯着 __proto__ 这个字符串做文章是远远不够的。constructor.prototype 这条暗道,以及那些偷懒的、不深度递归的过滤逻辑,都是赏金猎人们挖出漏洞的优质攻击面。下次碰到这类场景,直接用这些“旁门左道”,大概率能挖到高危漏洞。
觉得有帮助?点个“在看”分享给身边的猎友,一起搞钱。 你还见过哪些奇技淫巧的绕过案例?来评论区唠一唠。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:升斗安全 升斗安全XiuXiu 升斗安全XiuXiu《别只盯着 proto 了,constructor 才是原型污染的赏金“后门”》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论