我试图理解一个反序列化攻击,所以我想到了这个例子,如果你能纠正我,如果我误解了一些东西,那将会很有帮助。
我有这个小说课。
public class Player{
String name;
int attackStrength;
public Player(String name){
this.name = name;
this.attackStrength = Random.nextInt(10);
}
}
如果我序列化了这个类它将为我提供一个表示对象实例及其内部值(name
,attackStrength
)的字节数组。
这个小说类是随机的创建最大值为10的攻击强度。
如果我编辑了字节数组并重新读回来。我可以将代表attackStrength
的字节修改为50!然后DeSerialise数组,我现在有一个被黑客攻击的角色。
这是否是这种攻击形式背后的想法。
答案 0 :(得分:2)
假设Player
实现了java.io.Serializable
,那么反序列化将绕过构造函数,前提是它处于对手可以提供原始数据的环境中。这在[{3}} Java编程语言安全编码指南4.0版中得到了解决。
答案 1 :(得分:0)
老实说,我没有听过“反序列化攻击”这个词,但是你是对的,这是一个安全漏洞。
在某处存储文件的任何情况都可以编辑它,然后存在漏洞。如果他们只是在他们的本地机器(单人)上运行,那么就不值得担心。如果他们愿意,你无法阻止他们。
对于多玩家来说,唯一的方法是让服务器具有权威性并让它验证玩家所做的一切。你永远不会让客户告诉你他们的攻击力,你会告诉客户。