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

做网站提成视频专用客户端app

做网站提成,视频专用客户端app,在线app制作,兰州最新疫情文章目录动态代理的两个主要类InvocationHandler:调用处理程序Proxy : 代理代码示例动态代理在反序列化中的作用动态代理的两个主要类 jdk的动态代理主要需要了解两个类 InvocationHandler 调用处理程序类Proxy 代理类 InvocationHandler:调用处理程序…

文章目录

    • 动态代理的两个主要类
      • InvocationHandler:调用处理程序
      • Proxy : 代理
    • 代码示例
    • 动态代理在反序列化中的作用

动态代理的两个主要类

jdk的动态代理主要需要了解两个类

  • InvocationHandler 调用处理程序类
  • Proxy 代理类

InvocationHandler:调用处理程序

public interface InvocationHandler

InvocationHandler是由代理实例调用处理程序实现的接口

每一个代理实例都有一个调用处理程序

Object invoke(Object proxy, 方法 method, Object[] args)

当在代理实例上调用方法时,其实就会自动调用这个调用处理程序 invoke()

参数:

  • proxy : 代理实例对象
  • method: 当前被调用的方法对象,通过它可以获取方法名、参数类型等信息
  • args: 调用方法时传递的参数值

Proxy : 代理

public class Proxy extends Object implements Serializable

Proxy提供了创建动态代理类的和实例的静态方法,它也是由这个方法所创建的动态代理类的超类

动态代理类是一个实现 在类创建时 在运行时指定的接口列表的类

代理接口是由代理类实现的接口

代理实例是代理类的实例对象

public static Object newProxyInstance(ClassLoader loader,<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException

返回指定接口的代理类的实例,该接口将 方法调用 分派给指定的 调用处理程序

参数

  • loader: 类加载器来定义代理类
  • interfaces: 代理类实现的接口列表
  • h : 调度方法调用的调用处理函数

代码示例

两个要点

  • 代理的是接口,而不是单个用户
  • 代理类是动态生成的,而不是静态写死的

首先定义接口类: UserService.java

package DynamicProxy;public interface UserService {public void add();public void del();public void update();public void query();
}

接口类的具体实现: UserServiceImpl.java

package DynamicProxy;public class UserServiceImpl implements UserService{@Overridepublic void add() {System.out.println("增加一个用户");}@Overridepublic void del() {System.out.println("删除一个用户");}@Overridepublic void update() {System.out.println("更新一个用户");}@Overridepublic void query() {System.out.println("查询一个用户");}
}

然后是动态代理的实现类: UserProxyInvocationHandler.java

package DynamicProxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class UserProxyInvocationHandler implements InvocationHandler {//要代理的接口private Object target;public UserProxyInvocationHandler() {}public UserProxyInvocationHandler(Object target) {this.target = target;}//动态生成代理类public Object getProxy() {Object proxy = Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);return proxy;}//处理代理类的实例对象@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {log(method.getName());Object obj = method.invoke(target, args);return obj;}//自定义需求public void log(String msg){System.out.println("【+】调用"+msg+"方法");}}

最后就是启动器 Client.java

package DynamicProxy;public class Client {public static void main(String[] args) {//真实角色UserService userService = new UserServiceImpl();//代理角色UserProxyInvocationHandler userProxyInvocationHandler = new UserProxyInvocationHandler(userService);//代理类(动态生成)UserService proxy = (UserService) userProxyInvocationHandler.getProxy();proxy.add();proxy.update();proxy.del();proxy.query();}
}

在这里插入图片描述

动态代理在反序列化中的作用

利用反序列化的漏洞,是需要一个入口类的

先假设存在一个能够漏洞利用的类为 B.f,比如 Runtime.exec 这种。
我们将入口类定义为 A,我们最理想的情况是 A[O] -> O.f,那么我们将传进去的参数 O 替换为 B 即可。但是这种情况是很少见的,不会这么简单。

那么如果入口类 A 存在 O.abc 这个方法,也就是 A[O] -> O.abc;而 O 呢,如果是一个动态代理类,Oinvoke 方法里存在 .f 的方法,便可以漏洞利用了

动态代理对象调用方法时,其所有的方法调用都会自动路由到InvocationHandler.invoke()里面去,也就是前面比如调用 proay.add()它会路由到UserProxyInvocationHandler.invoke方法里面去,从而多调用了一个log()方法,也就是打印调用了哪个函数

A[O] -> O.abc
O[O2] invoke -> O2.f // 此时将 B 去替换 O2
最后  ---->
O[B] invoke -> B.f // 达到漏洞利用效果

参考

https://drun1baby.top/2022/06/01/Java%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E5%9F%BA%E7%A1%80%E7%AF%87-04-JDK%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/
https://www.bilibili.com/video/BV1mc411h719?p=9
https://www.bilibili.com/video/BV16h411z7o9/?p=3&vd_source=cf7d01598010e70f1da4b79252417e78
http://www.dtcms.com/wzjs/41786.html

相关文章:

  • 网站地图如何做西安百度框架户
  • 设计感十足的网站北京seo关键词
  • 记事本怎么做网站图片链接免费外链发布
  • 做企业网站安装什么系统好admin5站长网
  • 网站怎么做更新宁波做seo推广企业
  • 建自己博客网站枫树seo网
  • 网站不备案的后果免费网络项目资源网
  • 做html网站搜索框代码百度推广怎么收费的
  • 网站开发与经营百度加盟
  • 网站内容搜索百度风云榜明星
  • 二级建造师证件查询全国联网seo推广网址
  • 寻找在山西运城专业做网站推广的搜狗推广效果好吗
  • 怎样制作一个app软件seo搜索优化技术
  • 视频上传网站如何做优化seo网站
  • 龙港哪里有做阿里巴巴网站磁力猫最佳搜索引擎入口
  • 临桂城乡建设局网站凡科建站
  • 房地产公司网站建设与推广方案最新的全国疫情
  • 毕业设计做网站哪种好seo网站的优化流程
  • 河南省住建委官方网站长春网站建设
  • seo对于电子商务网站推广的作用公司软文代写
  • 找效果图去哪个网站凡科建站下载
  • 简述网站制作的一般流程优化关键词是什么意思
  • 街道口做网站软文写作什么意思
  • 在线支付的网站怎么做互联网营销模式有哪些
  • 云南疫情风险地区最新名单seo关键词优化外包
  • .net网站开发源码注释手机怎么创建自己的网站平台
  • 重庆提供行业网站建站报价关键词优化排名用什么软件比较好
  • 网站策划与建设实训心得企业管理培训课程网课
  • 国外有没有做问卷调查的网站网站优化方案案例
  • 珠海市横琴新区建设环保局网站手机百度网盘网页版登录入口