当前位置: 首页 > news >正文

JS逆向proxy代理

作用

  1. 环境补全
  2. 调试与分析
  3. 修改代码行为

代码

var demo1 = {username: "demo1",age: 22
}
var demo2 = {username: "demo2",age: 42
}demo1 = new Proxy(demo1, {get(target, p, receiver) {// console.log(target, p, receiver)console.log("target: ", target);console.log("p: ", p);return Reflect.get(target,p)},set(target, p, value, receiver) {console.log("设置操作",target,p,value)Reflect.set(target, p, value);}
});demo2 = new Proxy(demo2, {get(target, p, receiver) {// console.log(target, p, receiver)console.log("target: ", target);console.log("p: ", p);return Reflect.get(target,p)},set(target, p, value, receiver) {console.log("设置操作",target,p,value)Reflect.set(target, p, value);}
});/*yuan.username
yuan.age
alex.age*/demo1.age = 100demo2.age=18

运行结果
在这里插入图片描述

上面代码中可以看出 每监听一个对象会新增很多代码,于是对上面代码进行封装

var demo1 = {username: "demo1",age: 22
}
var demo2 = {username: "demo2",age: 42
}function setProxyArr(proxyObjArr) {for (let i = 0; i < proxyObjArr.length; i++) {const handler = `{get: function(target, property, receiver) {console.log("方法:", "get  ", "对象:", "${proxyObjArr[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", target[property], ", 属性值类型:", typeof target[property]);return target[property];},set: function(target, property, value, receiver) {console.log("方法:", "set  ", "对象:", "${proxyObjArr[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]);return Reflect.set(...arguments);}}`;eval(`try {${proxyObjArr[i]};${proxyObjArr[i]} = new Proxy(${proxyObjArr[i]}, ${handler});} catch (e) {${proxyObjArr[i]} = {};${proxyObjArr[i]} = new Proxy(${proxyObjArr[i]}, ${handler});}`);}
}setProxyArr(["demo1", "demo2"])/*yuan.username
yuan.age
alex.age*/demo1.age = 100demo2.age=18

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 经纬恒润亮相第四届焉知汽车年会,功能安全赋能域控
  • [C#]winform基于深度学习算法MVANet部署高精度二分类图像分割onnx模型高精度图像二值化
  • 鸿蒙 点击获取电话号拨打电话 @ohos.telephony.call (拨打电话)
  • 单例模式创建方式
  • 计算机网络之IPv4深度解析
  • 黄山黄小徽光影乐园:思特科技打造沉浸式光影乐园解决方案,快乐指数拉满了!
  • LabVIEW滚动轴承故障诊断系统
  • 数值计算引擎:搭建远程容器开发环境
  • html 首行缩进2字符
  • python语言day7 函数式编程 面向对象编程
  • android13顶部状态栏里面调节背光,不隐藏状态栏面板
  • CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)
  • 【Qt开发】QSerialPort串口配置、发送、接收回调函数 多线程接收的串口类封装
  • 【python基础】—离线环境下,在linux中安装python包(以sqlalchemy为例)
  • SpringBoot获取不到Nacos配置信息报错,Nacos鉴权
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • android 一些 utils
  • Angular2开发踩坑系列-生产环境编译
  • CSS 专业技巧
  • If…else
  • Java 网络编程(2):UDP 的使用
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js数组之filter
  • Laravel 中的一个后期静态绑定
  • Linux中的硬链接与软链接
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis的resp协议
  • Vultr 教程目录
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • yii2中session跨域名的问题
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 番外篇1:在Windows环境下安装JDK
  • 分布式任务队列Celery
  • 工程优化暨babel升级小记
  • 构建二叉树进行数值数组的去重及优化
  • 关于for循环的简单归纳
  • ------- 计算机网络基础
  • 简单实现一个textarea自适应高度
  • 精彩代码 vue.js
  • 聚类分析——Kmeans
  • 前端路由实现-history
  • 区块链共识机制优缺点对比都是什么
  • 详解NodeJs流之一
  • 正则与JS中的正则
  • 大数据全解:定义、价值及挑战
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #pragma pack(1)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $(selector).each()和$.each()的区别
  • $GOPATH/go.mod exists but should not goland
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t