【发布时间】:2015-09-13 03:22:30
【问题描述】:
我遇到了this article 声明:
“规则 9:让你的类不可序列化
序列化很危险,因为它允许攻击者掌握对象的内部状态。”
虽然我能理解作者的意思,但为什么不能只加密任何序列化数据?如果允许序列化数据的序列化不安全,那么正确的选择是什么?
【问题讨论】:
标签: java security encryption serialization
我遇到了this article 声明:
“规则 9:让你的类不可序列化
序列化很危险,因为它允许攻击者掌握对象的内部状态。”
虽然我能理解作者的意思,但为什么不能只加密任何序列化数据?如果允许序列化数据的序列化不安全,那么正确的选择是什么?
【问题讨论】:
标签: java security encryption serialization
我认为作者的意思是你应该让你的类默认为不可序列化。也就是说,如果您有意序列化您的课程 - 请继续这样做。
至于替代方案,您可以创建对象的 状态 的 json/xml 表示 - 而不会泄露实现的内部结构。
您也可以按照您的建议对这些位进行加密。可以在this article 中找到如何使用位旋转的简单演示。
【讨论】:
Bloch 的第 11 章,Effective Java 中的第 76 项涵盖了这一点。您需要仔细回读一个序列化的类,以防有人在它创建后对其进行了更改。基本上你需要一个防御性的readObject() 方法。
【讨论】: