美文网首页JAVA
JVM注解@CallSensitive

JVM注解@CallSensitive

作者: luoyoub | 来源:发表于2018-04-26 23:03 被阅读64次

JVM注解@CallSensitive

@CallSensitive是JVM中专用的注解,在类加载过过程中是可以常常看到这个注解的身影的,@CallSensitive用来找到真正发起反射请求的类

@CallSensitive的使用

@CallerSensitive
public static Class<?> forName(String className)
throws ClassNotFoundException {
Class<?> caller = Reflection.getCallerClass();
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}

注意:Reflection.getCallerClass()方法调用所在的方法必须用@CallerSensitive进行注解

这个注解是为了堵住漏洞用的。曾经有黑客通过构造双重反射来提升权限,原理是当时反射只检查固定深度的调用者的类,看它有没有特权,例如固定看两层的调用者(getCallerClass(2))。如果我的类本来没足够权限群访问某些信息,那我就可以通过双重反射去达到目的:反射相关的类是有很高权限的,而在 我->反射1->反射2 这样的调用链上,反射2检查权限时看到的是反射1的类,这就被欺骗了,导致安全漏洞。使用CallerSensitive后,getCallerClass不再用固定深度去寻找actual caller(“我”),而是把所有跟反射相关的接口方法都标注上CallerSensitive,搜索时凡看到该注解都直接跳过,这样就有效解决了前面举例的问题

参考资料

https://blog.csdn.net/HEL_WOR/article/details/50199797

相关文章

  • JVM注解@CallSensitive

    JVM注解@CallSensitive @CallSensitive是JVM中专用的注解,在类加载过过程中是可以常...

  • Java开发

    JVM 内存溢出实例 - 实战 JVM(二) 介绍 JVM 内存溢出产生情况分析Java - 注解详解 详细介绍 ...

  • java基础类-5-注解

    概述 注解:元数据注解本身仅仅是元数据,和业务逻辑无关,业务逻辑是注解的用户来实现的,比如JVM也是这样的一个用户...

  • Android开发想要百万年薪,你得这样做!

    Java高阶:原理:泛型、线程池、classloader、反射、JVM、I/O、注解、序列化; Framework...

  • 注解

    注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”。从JVM的角度看,注解本身对代码逻辑没有任何影响...

  • SpringBoot 应用监控

    对JVM的监控 1.首先添加依赖 2.启用Prometheus Metrics添加注解@EnableProme...

  • 反射

    访问构造方法 访问成员变量 访问方法 反射注解 前置条件需要将注解设置在jvm运行时不进行清除,允许1.定义一个注...

  • 注解中获取属性值的底层原理

    注解中获取属性值的底层原理 Java里面万物皆为对象,注解也不例外,JVM会在运行时为我们生成中间对象。 要获取J...

  • AnnotatedElement

    简介 这个接口(AnnotatedElement)的对象代表了在当前JVM中的一个“被注解元素”(可以是Class...

  • Kotlin小结2(@Jvm方法研究)

    研究下kotlin中以@Jvm开头的注解 1 @JvmOverloads 官方注释文档 意思就是说如果一个方法中有...

网友评论

    本文标题:JVM注解@CallSensitive

    本文链接:https://www.haomeiwen.com/subject/dqjvlftx.html