Spring如何防范请求体反序列化攻击与JSON注入?
Spring 防范JSON反序列化攻击的机制
Spring结合Jackson等序列化库,通过多层防护抵御恶意类实例化及命令执行类的反序列化攻击,具体机制如下:
1. Jackson默认安全限制
Jackson从2.9版本起,默认禁用了java.lang.Runtime、java.lang.ProcessBuilder等危险类的反序列化,攻击者尝试在JSON中指定这类恶意类时,会直接触发异常,无法完成实例化。
同时,Jackson默认关闭了enableDefaultTyping(高版本已标记为不安全),不会通过@class这类字段允许任意类的实例化——只有明确绑定的目标类才能被解析,从根源上切断攻击者指定恶意类的路径。
2. Spring MVC请求绑定的严格性
Spring MVC处理@RequestBody时,只会将JSON数据绑定到你预先声明的业务DTO/实体类上。比如接口接收的是UserDTO,即便JSON里包含恶意类字段,Spring也只会解析UserDTO定义的属性,忽略无关内容,不会去实例化未声明的类。
3. 可自定义的安全增强配置
- 针对Jackson的
ObjectMapper,可以用setAllowedClasses指定仅允许反序列化的类列表,或通过addMixIn限制类的属性访问范围; - Spring Boot项目可开启
spring.jackson.deserialization.fail-on-unknown-properties=true配置,一旦JSON出现业务类未定义的属性,直接抛出异常阻断处理; - 始终使用Jackson最新稳定版,每个版本都会修复已知的反序列化漏洞。
关于你的推测
你的判断是对的,Jackson作为Spring生态默认的JSON序列化库,在反序列化安全上做了大量优化,但安全防护是多层叠加的,除了依赖类库,还要结合Spring本身的请求绑定规则,才能最大化降低风险。
内容的提问来源于stack exchange,提问作者Huseyin Aydin
相关产品推荐
相关产品推荐

