JavaScript如何使用代理对象
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,小编给大家分享一下JavaScript如何使用代理对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代理对象代理对象是目前
千家信息网最后更新 2025年01月21日JavaScript如何使用代理对象
小编给大家分享一下JavaScript如何使用代理对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
代理对象
代理对象是目前JavaScript中最有用的一个工具,这种对象可以帮助我们了解代码中的其他对象,包括修改其行为以及触发特定环境下的对象活动。比如说,我们可以创建一个嗲哩对象并跟踪每一次document.createElemen调用,然后记录下相关信息:
const handler = { // Our hook to keep the track apply: function (target, thisArg, args){ console.log("Intercepted a call tocreateElement with args: " + args); return target.apply(thisArg, args) }} document.createElement= new Proxy(document.createElement, handler) // Create our proxy object withour hook ready to interceptdocument.createElement('div');
接下来,我们可以在控制台中记录下相关参数和信息:
VM64:3 Intercepted a call to createElement with args: div
我们可以利用这些信息并通过拦截某些特定函数来调试代码,但是本文的主要目的是为了介绍反调试技术,那么我们如何检测"对方"是否使用了代理对象呢?其实这就是一场"猫抓老鼠"的游戏,比如说,我们可以使用相同的代码段,然后尝试调用toString方法并捕获异常:
//Call a "virgin" createElement:try { document.createElement.toString();}catch(e){ console.log("I saw your proxy!");}
信息如下:
"function createElement() { [native code] }"
但是当我们使用了代理之后:
//Then apply the hookconsthandler = { apply: function (target, thisArg, args){ console.log("Intercepted a call tocreateElement with args: " + args); return target.apply(thisArg, args) }}document.createElement= new Proxy(document.createElement, handler); //Callour not-so-virgin-after-that-party createElementtry { document.createElement.toString();}catch(e) { console.log("I saw your proxy!");}
没错,我们确实可以检测到代理:
VM391:13 I saw your proxy!
我们还可以添加toString方法:
const handler = { apply: function (target, thisArg, args){ console.log("Intercepted a call tocreateElement with args: " + args); return target.apply(thisArg, args) }}document.createElement= new Proxy(document.createElement, handler);document.createElement= Function.prototype.toString.bind(document.createElement); //Add toString//Callour not-so-virgin-after-that-party createElementtry { document.createElement.toString();}catch(e) { console.log("I saw your proxy!");}
现在我们就没办法检测到了:
"function createElement() { [native code] }"
就像我说的,这就是一场"猫抓老鼠"的游戏。
以上是"JavaScript如何使用代理对象"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
对象
代理
信息
代码
篇文章
检测
内容
就是
方法
比如说
老鼠
帮助
相同
接下来
不怎么
函数
办法
参数
反调
大部分
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
360网络安全都思航
数据库练习含答案
政府机关 维护网络安全
公司管理软件开发
网络安全在北京工作二年工资
网络安全管控运维
福建综合软件开发定制大概价格
观看网络安全宣传教育有感
电脑宝可梦服务器地址
移动支付软件开发
vba更新数据库数据类型
广东服务器风扇供应商云空间
气候数据库
找数据库密码工具
kdb 数据库
sql数据库毕业答辩问题
简述数据库优化方式
网吧服务器是什么
服务器存储技术培训
广电家庭服务器亮黄灯如何解决
服务器安全团队
北京质量软件开发平台
sql如何选择数据库
杭州莱凡网络技术有限公司
我国软件开发的方法
jsp数据库连接实例
网络安全法 宣传动画
p30检查显示无法连接到服务器
数据库不能有重复的数据
网络技术和软件技术一样吗