Checking if a JavaScript native function is monkey patched (2022)
8 months ago
- #JavaScript
- #Native Functions
- #Monkey Patching
- JavaScript原生函数可以通过猴子补丁技术进行覆盖,这是一种修改内置API的方法。
- 猴子补丁功能强大但风险高,可能与其他补丁冲突或随引擎更新失效。
- 检查函数是否为原生可通过`toString()`查找'[native code]'标识,但这种方法可被欺骗。
- 欺骗`toString()`检查的方法包括在注释中添加'[native code]'或直接覆盖`toString()`本身。
- 使用`bind()`或Proxy也能使猴子补丁函数伪装成原生函数。
- 另一种方案是在猴子补丁发生前存储并比对函数原始引用。
- 通过同源iframe获取'纯净'原生函数也是一种方法,但存在局限性。
- 引用相等性检查更可靠,但需在脚本执行早期存储原始函数引用。
- 由于JavaScript的动态特性,不存在万无一失的猴子补丁检测方法。