3

在阅读 Java Security 时,我遇到了以下句子,但在 Internet 上找不到任何令人满意的解释。谁能解释一下

  • 防止使用字节码加载类
  • 防止装载非法包裹
4

3 回答 3

3

然而,我们不能确定类本身是安全的。仍然有 SecurityManager 的安全网将阻止类访问受保护的资源,例如网络和本地硬盘,但这本身是不够的。该类可能包含非法字节码、伪造指向受保护内存的指针、程序堆栈上溢或下溢,或以其他方式破坏 JVM 的完整性。检查[1] 中的主题类文件验证器:http: //medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm

于 2009-11-17T06:47:18.827 回答
2

字节码验证器进行以下检查:

  • 分支必须在方法的代码数组范围内。
  • 所有控制流指令的目标都是指令的开始。在宽指令的情况下,宽操作码被认为是指令的开始,并且给出被该宽指令修改的操作的操作码不被认为是指令的开始。不允许分支到指令中间。
  • 没有指令可以访问或修改索引大于或等于其方法指示它分配的局部变量数量的局部变量。
  • 所有对常量池的引用都必须指向适当类型的条目。例如:指令 ldc 只能用于 int 或 float 类型的数据或 String 类的实例;指令 getfield 必须引用一个字段。
  • 代码不会在指令中间结束。
  • 执行不能脱离代码的末尾。
  • 对于每个异常处理程序,受处理程序保护的代码的起点和终点必须位于指令的开头,或者在终点的情况下,紧接在代码的结尾之后。起点必须在终点之前。- 异常处理程序代码必须从有效指令开始,并且不能从被宽指令修改的操作码开始。
于 2009-11-17T07:27:13.333 回答
0

源代码编译成字节码,分发给用户。如果字节码已损坏,或者不是由 java 编译器生成,那么它可能是非法的,这意味着字节没有意义。

于 2009-11-17T06:36:59.933 回答