2

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

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

4

2 回答 2

3

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

一件事是字节码操作产生的错误可能更难诊断。检查源代码和源代码级调试将更加困难。

是否会导致安全问题,

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

此外,字节码修改:

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

序列化等?

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

于 2010-11-16T13:12:27.210 回答
2

JVM 验证字节码,但异常的字节码可能代表安全威胁。

于 2010-11-16T13:05:14.567 回答