代码之家  ›  专栏  ›  技术社区  ›  Tony the Pony

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

  •  2
  • Tony the Pony  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Stephen C    14 年前

    使用它有什么缺点吗(除了将功能添加到源代码中不明显的类之外)?

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

    会不会造成安全问题,

    验证程序应该(理论上)防止修改后的字节码破坏核心类型系统和损坏JVM。(不言而喻,不受信任的代码不应该被允许做字节码修改,所以我们可以对这种情况进行打折。)但是,在过去,一些Java字节码验证器已经不是彻底的。

    此外,字节码修改:

    • 更难进行正确的基于源代码的安全分析,以及
    • 可能会使使用静态分析工具(如findbugs)的(有限)安全优势失效。

    序列化等?

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

        2
  •  2
  •   trashgod    14 年前

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