标准答案
- 部分语言和框架在反序列化对象时会调用构造器、setter、类型解析器或特殊回调,攻击者可利用已有类组合形成危险执行链。
- 跨服务和外部输入优先使用 JSON、Protobuf 等纯数据格式,并把结果解析为简单 DTO、基础类型和受控集合,而不是任意语言对象图。
- 必须显式限制允许类型、字段、嵌套深度、数组长度和总大小;对未知字段和多态类型标记采取保守策略。
- 签名或加密能保护传输来源和机密性,但不代表可信载荷可以跳过 schema 校验;密钥泄露、内部误用和版本错误仍会产生风险。
- 依赖库、消息消费者和历史数据迁移也应审计反序列化入口,并通过补丁、隔离和最小权限降低潜在影响。
题目解析
反序列化漏洞的危险在于数据边界被突破:本应只是输入的内容被运行时当成可执行对象关系处理。
数据契约越清晰,越容易做兼容演进、审计和跨语言调用;把内部对象直接序列化给其他服务通常会把实现细节和安全风险一起带出去。
常见误区
- 认为只要消息来自内部队列就可以反序列化任意对象。
- 开启自动多态类型解析或允许客户端指定类名。
- 把加密后的数据视为天然安全,省略类型和大小限制。