我偶然发现了this article:
"规则9:使您的课程不可序列化
序列化是危险的,因为它允许攻击者获取对象的内部状态。"
虽然我可以理解作者在说什么,但为什么不能只加密任何序列化数据呢?如果序列化允许序列化数据不安全,那么适当的选择是什么?
答案 0 :(得分:2)
我认为作者意味着您应该使您的类不可序列化默认情况下。也就是说,如果你故意想要序列化你的课程 - 请继续这样做。
至于替代方案,您可以创建对象的 state 的json / xml表示形式 - 而不会泄露实现的内部。
您也可以像建议的那样加密这些位。可以在this article中找到如何通过使用位旋转来执行此操作的简单演示。
答案 1 :(得分:1)
Bloch,Effective Java的第11章中的第76项涵盖了这一点。你需要小心地读回序列化的类,以防有人在创建之后对其进行了更改。基本上你需要一种防御性的readObject()
方法。