字节码操作有什么危险(如果有的话)?

时间:2010-11-16 11:36:38

标签: java bytecode-manipulation

字节码增强似乎是一种非常有趣的Java技术,但它有一种“黑魔法”的感觉。使用它有什么缺点(除了将功能添加到源代码中不明显的类的事实之外)?

是否会导致安全性,序列化等问题?

2 个答案:

答案 0 :(得分:3)

  

使用它是否有任何缺点(除了将功能添加到源代码中不明显的类的事实之外)?

有一件事是由字节码操作创建的错误可能更难以诊断。检查源代码和源代码级调试会更难。

  

是否会导致安全问题,

验证者应该(理论上)防止修改后的字节码破坏核心类型系统并破坏JVM。 (不言而喻,不应该允许不受信任的代码进行字节码修改,因此我们可以对这种情况进行折扣。)但是,在过去,一些Java字节码验证器并不是那么彻底。

此外,字节码修改:

  • 使得进行适当的基于源代码的安全性分析变得更加困难,并且
  • 可以取消使用静态分析工具(如FindBugs)的(有限的)安全性优势。
  

序列化等?

字节码修改可以做一些事情,使现有的序列化对象可以被修改后的类读取;例如通过添加和删除字段,或通过更改类超类和接口。但是,您可以通过更改源代码来执行相同的操作。

答案 1 :(得分:2)

JVM验证bytecodes,但deviant bytecode可能代表安全威胁。