Java 反序列化攻击的愚蠢示例

Java 反序列化攻击的愚蠢示例,java,security,serialization,deserialization,exploit,Java,Security,Serialization,Deserialization,Exploit,我试图理解一个反序列化攻击,所以我想到了这个例子,如果你能纠正我的误解,这将是有益的。 我有这门小说课 public class Player{ String name; int attackStrength; public Player(String name){ this.name = name; this.attackStrength = Random.nextInt(10); } } 如果我序列化这个类,它将为我提


我试图理解一个反序列化攻击,所以我想到了这个例子,如果你能纠正我的误解,这将是有益的。 我有这门小说课

public class Player{
    String name;
    int attackStrength;

    public Player(String name){
        this.name = name;
        this.attackStrength = Random.nextInt(10);
    }   
}
如果我序列化这个类,它将为我提供一个字节数组,表示对象实例及其内部值(
name
attackStrength
)。这个虚构类随机创建一个最大值为10的攻击强度。
如果我编辑了字节数组并读回。我可以将表示
attackStrength
的字节修改为50!然后反序列化数组,我现在有了一个被黑客攻击的角色。这就是这种攻击形式背后的想法。

老实说,我没有听说过“反序列化攻击”这个词,但你是对的,这将是一个安全漏洞

在任何情况下,如果您将文件存储在某个位置,则可以对其进行编辑,那么该漏洞就会存在。如果他们只是在本地机器(单机)上运行,那么就不值得担心了。如果他们愿意,你无法阻止他们入侵


对于多玩家,唯一的方法是使服务器具有权威性,并让它验证玩家所做的一切。你永远不会让客户端告诉你他们的攻击强度,你会告诉客户端。

假设
Player
实现了
java.io.Serializable
,那么反序列化将绕过构造函数,前提是它处于对手可以提供原始数据的环境中。这在Java编程语言4.0版的安全编码指南中进行了讨论。

对于Google来说,这种攻击/利用漏洞的更合适的名称是什么。基本上,它只是编辑保存文件。,所以请尝试从以下开始进行Google搜索:)不敢相信我错过了
角色
我会把它改成player。有趣的是,这个指南实际上就是我遇到这个话题的地方。我想检查一下我明白我在读什么谢谢。