Hasty Briefsbeta

双语

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的动态特性,不存在万无一失的猴子补丁检测方法。