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

网站开发支持上传gif本溪网站开发

网站开发支持上传gif,本溪网站开发,模板简历,手机做wifi中继上外国网站目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行反序列化链构造 思维导图 Java知识点 功能#xff1a;数据库操作#xff0c;文件操作#xff0c;…目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行反序列化链构造 思维导图 Java知识点 功能数据库操作文件操作序列化数据身份验证框架开发第三方库使用等. 框架库MyBatisSpringMVCSpringBootShiroLog4jFastJson等 技术ServletListenFilterInterceptorJWTAOP反射机制待补充 安全SQL注入RCE执行反序列化脆弱验证未授权访问待补充 安全原生开发安全第三方框架安全第三方库安全等待补充 Java-反射-基础知识 1、什么是Java反射? 参考https://xz.aliyun.com/t/9117 Java提供了一套反射API该API由Class类与java.lang.reflect类库组成。 该类库包含了Field、Method、Constructor等类。对成员变量成员方法和构造方法的信息进行的编程操作可以理解为反射机制。 2、为什么要用到反射? 参考https://xz.aliyun.com/t/9117 其实从官方定义中就能找到其存在的价值在运行时获得程序或程序集中每一个类型的成员和成员的信息从而动态的创建、修改、调用、获取其属性而不需要事先知道运行的对象是谁。划重点在运行时而不是编译时。不改变原有代码逻辑自行运行的时候动态创建和编译即可 3、反射机制应用 开发应用场景 Spring框架的IOC基于反射创建对象和设置依赖属性。 SpringMVC的请求调用对应方法也是通过反射。 JDBC的Class#forName(String className)方法也是使用反射。 安全应用场景 构造利用链触发命令执行 反序列化中的利用链构造 动态获取或执行任意类中的属性或方法 动态代理的底层原理是反射技术 rmi反序列化也涉及到反射操作 Java-反射-Class对象类获取 //1、根据类名类名.class Class userClass  User.class; //2、根据对象对象.getClass() User user  new User(); Class aClass  user.getClass(); //3、根据全限定类名Class.forName(全路径类名) Class aClass1  Class.forName(com.example.reflectdemo.User); //4、通过类加载器获得Class对象//ClassLoader.getSystemClassLoader().loadClass(全路径类名); ClassLoader clsloadClassLoader.getSystemClassLoader(); Class aClass2  clsload.loadClass(com.example.reflectdemo.User); 创建一个User类包含成员变量和成员方法构造方法便于获取反射所对应需要 package com.example;public class User {//成员变量public String namexiaodi;public int age 31;private String genderman;protected String jobsec;//构造方法public User(){//System.out.println(无参数);}public User(String name){System.out.println(我的名字name);}private User(String name,int age){System.out.println(name);System.out.println(age);}//成员方法public void userinfo(String name,int age,String gender,String job){this.jobjob;this.ageage;this.name name;this.gendergender;}protected void users(String name,String gender){this.name name;this.gendergender;System.out.println(users成员方法name);System.out.println(users成员方法gender);}}GetClass.java package com.example;public class GetClass {public static void main(String[] args) throws ClassNotFoundException {//1、根据全限定类名Class.forName(全路径类名)Class aClass Class.forName(com.example.User);System.out.println(aClass);//2、根据类名类名.classClass userClass User.class;System.out.println(userClass);//3、根据对象对象.getClass()User user new User();Class aClass1 user.getClass();System.out.println(aClass1);//4、通过类加载器获得Class对象//ClassLoader.getSystemClassLoader().loadClass(全路径类名);ClassLoader clsloadClassLoader.getSystemClassLoader();Class aClass2 clsload.loadClass(com.example.User);System.out.println(aClass2);} }Java-反射-Field成员变量类获取 //Class aClass  Class.forName(com.example.reflectdemo.User); //获取公共成员变量对象 //        Field[] fieldsaClass.getFields(); //        for(Field f:fields){ //            System.out.println(f); //        } //获取所有成员变量对象 //        Field[] fieldsaClass.getDeclaredFields(); //        for(Field f:fields){ //            System.out.println(f); //        } //获取公共私有单个成员变量对象 //        Field fieldaClass.getField(age); //        Field fieldaClass.getDeclaredField(gender); //        System.out.println(field); //城边变量值获取和赋值 //        User u  new User(); //        Field fieldaClass.getField(age); //        field.set(u,30); //        Object afield.get(u); //        System.out.println(a); GetField.java package com.example;import java.lang.reflect.Field;public class GetField {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {Class aClass Class.forName(com.example.User);//获取公共的成员变量 // Field[] fields aClass.getFields(); // for(Field fd:fields){ // System.out.println(fd); // }//获取所有的成员变量 // Field[] fields aClass.getDeclaredFields(); // for(Field fd:fields){ // System.out.println(fd); // }//获取单个的公共成员变量Field name aClass.getField(name);System.out.println(name);//获取单个的成员变量Field gender aClass.getDeclaredField(gender);System.out.println(gender);//获取公共的成员变量age的值User u new User();Field fieldaClass.getField(age);//取值Object afield.get(u);System.out.println(a);//赋值field.set(u,32);Object aafield.get(u);System.out.println(aa);} } Java-反射-Method成员方法类获取 //Class aClass  Class.forName(com.example.reflectdemo.User); //返回所有公共成员方法对象的数组包括继承的 //        Method[] methods  aClass.getMethods(); //        for (Method me:methods){ //            System.out.println(me); //        } //返回所有成员方法对象的数组不包括继承的 //        Method[] methods  aClass.getDeclaredMethods(); //        for (Method me:methods){ //            System.out.println(me); //        } //返回单个公共成员方法对象 //        Method methods  aClass.getMethod(getName); //        System.out.println(methods); //        Method methods  aClass.getMethod(setName, String.class); //        System.out.println(methods); //返回单个成员方法对象 //        Method methods  aClass.getDeclaredMethod(UserInfo, String.class, int.class, String.class); //        System.out.println(methods); //运行方法invoke //        Method methods  aClass.getDeclaredMethod(UserInfo, String.class, int.class, String.class); //        User u  new User(); //        //私有需要开启临时 //        methods.setAccessible(true); //        methods.invoke(u,xiaodi,18,man); GetMethod.java package com.example;import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class GetMethod {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {Class aClass Class.forName(com.example.User);//获取包括继承的公共成员方法 // Method[] methods aClass.getMethods(); // for(Method me:methods){ // System.out.println(me); // }//获取不包括继承的所有成员方法 // Method[] methods aClass.getDeclaredMethods(); // for(Method me:methods){ // System.out.println(me); // }//获取单个的成员方法 // Method users aClass.getDeclaredMethod(users, String.class,String.class); // System.out.println(users);// 对成员方法进行执行// invoke() 方法用于调用指定对象的方法并传递相应的参数。User u new User();Method users aClass.getDeclaredMethod(users, String.class,String.class);users.invoke(u,xiaodigay,gay1);} }Java-反射-Constructor构造方法类获取 //Class aClass  Class.forName(com.example.reflectdemo.User); //返回所有公共构造方法对象的数组 //        Constructor[] constructors  aClass.getConstructors(); //        for(Constructor con:constructors){ //            System.out.println(con); //        } //返回所有构造方法对象的数组 //        Constructor[] constructors  aClass.getDeclaredConstructors(); //        for(Constructor con:constructors){ //            System.out.println(con); //        } //返回单个公共构造方法对象 //        Constructor con1aClass.getConstructor(); //        Constructor con1aClass.getConstructor(String.class); //        System.out.println(con1); //返回单个构造方法对象 //        Constructor con2aClass.getDeclaredConstructor(int.class); //Constructor con2aClass.getDeclaredConstructor(String.class,int.class, String.class); //        System.out.println(con2); //        Constructor con2aClass.getDeclaredConstructor(int.class); //        con2.setAccessible(true); //        User uu(User) con2.newInstance(xiaodi,30,man); //        System.out.println(uu); package com.example;import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;public class GetConstructor {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class aClass Class.forName(com.example.User);//获取公共的构造方法 // Constructor[] constructors aClass.getConstructors(); // for (Constructor con:constructors){ // System.out.println(con); // }//获取所有的构造方法 // Constructor[] constructors aClass.getDeclaredConstructors(); // for (Constructor con:constructors){ // System.out.println(con); // }//获取单个的公共的构造方法 // Constructor constructor aClass.getConstructor(String.class); // System.out.println(constructor); // // //获取单个的构造方法 // Constructor con1 aClass.getDeclaredConstructor(String.class,int.class); // System.out.println(con1);//对构造方法进行操作(两个参数stringint) // Constructor con2aClass.getDeclaredConstructor(String.class,int.class); // //临时开启对私有的访问 // con2.setAccessible(true); // User uu(User) con2.newInstance(xiaodigaygay,40); // System.out.println(uu);//对构造方法进行执行(1个参数strin)Constructor con2aClass.getConstructor(String.class);con2.newInstance(xiaodigaygay);} }Java-反射-不安全命令执行反序列化链构造 1 、反射实现 - 命令执行 -原型 Runtime.getRuntime().exec(calc); -反射 Class aClass  Class.forName(java.lang.Runtime); Method[] methods  aClass.getMethods(); for (Method me:methods){ System.out.println(me); } Method exec  aClass.getMethod(exec, String.class); Method getRuntimeMethod  aClass.getMethod(getRuntime); Object runtime  getRuntimeMethod.invoke(aClass); exec.invoke(runtime, calc.exe); Class c1 Class.forName(java.lang.Runtime); Constructor m  c1.getDeclaredConstructor(); m.setAccessible(true); c1.getMethod(exec, String.class).invoke(m.newInstance(), calc); 2、不安全的反射对象 指应用程序使用具有反射功能的外部输入来选择要使用的类或代码 可能被攻击者利用而输入或选择不正确的类。绕过身份验证或访问控制检查 参考分析https://zhuanlan.zhihu.com/p/165273855 利用结合https://xz.aliyun.com/t/7031反序列化利用链 GetRunExec.java package com.example;import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class GetRunExec {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {//原生调用 JDK自带的rt.jar // Runtime.getRuntime().exec(calc);//如果是第三方的jar包//通过 Class.forName(java.lang.Runtime) 方法获取了 java.lang.Runtime 类的 Class 对象并将其赋值给 aClass。Class aClass Class.forName(java.lang.Runtime);//获取所有公共包括继承的成员方法Method[] methods aClass.getMethods();for(Method me:methods){System.out.println(me);}//获取exec成员方法Method exec aClass.getMethod(exec, String.class);//获取getRuntime成员方法Method getRuntimeMethod aClass.getMethod(getRuntime);//执行Object runtime getRuntimeMethod.invoke(aClass);exec.invoke(runtime, calc.exe);} } 思维导图
http://www.dnsts.com.cn/news/9801.html

相关文章:

  • 手机网站域名查询网页升级访问未成年
  • 企业网站和展板建设wordpress 个人设置
  • 网站怎么做响应式温州企业网站制作
  • 建设一个网站需要哪些员工广州app客户端开发
  • asp 免费网站模板扫黄打非网站建设
  • 一个网站多个域名的seo优化移动应用开发专业
  • 搜索的网站后大拇指分享数量不见了长沙网站建设索王道下拉
  • 外国服务器的网站西宁网站建设西宁
  • 网站搭建软件d北京做视觉网站
  • 网站建设东莞长安镇微信群投票网站怎么做
  • 怎么分析竞争对手网站做家教的正规网站
  • 修改dns连接外国网站怎么制作小视频
  • 要个网站哪里有做网站的单位
  • 承接网站建设广告语广州市平安建设 网站
  • 有没有什么网站专门帮人做问卷wordpress 轻论坛
  • 网站宣传工作ui设计周末培训学校
  • 建设企业网站的好处是什么h5网站设计方案
  • 网站建设培训班南宁苏州苏州设计公司
  • 用自己的电脑做服务器建网站名人朋友圈网页版qq登录入口
  • 做旅游的海报图片网站上海好的网站设计公司有哪些
  • 餐饮网站建设公司黄骅港赶海攻略
  • 网站怎么显示建设中房产信息网上自助查询
  • 怎么做电力设计公司网站长图片生成器在线制作
  • 北京建设高端网站进贤网站建设
  • 医院网站HTML5把asp.net写的网站别人怎么访问
  • 太仓智能网站开发墨刀做网站上下滑动的交互
  • 用npp做网站网站备案号是什么意思
  • 好建网站做细分领域的同城网站
  • 夸克网站免费进入建立一个app平台需要多少钱
  • 自己做网站开发24小时学会网站建设