首页 > 解决方案 > RedisTemplate 导致 Fortify 动态代码评估中的不安全反序列化

问题描述

在制作 spring redis 数据模板时,我使用:

RedisTemplate<String, xxxDTO> template = new RedisTemplate<>();

然后我还将反序列化器设置为一个自定义的反序列化器,在不安全的反序列化的情况下将某些类列入白名单。

Fortify 仍然以某种方式突出显示:

new RedisTemplate<>();

作为动态代码评估期间的不安全反序列化,在王国输入验证和表示中。

如何在不被标记的情况下制作 RedisTemplate?

标签: javadeserializationfortifyspring-data-redis

解决方案


我通过静态代码分析器的试验和实验找到了自己的答案。显然您应该重新编写 RedisTemplate 类的实现并自己实现 jdkserializationredisserializer。

具体来说,您应该重写并制作一个反序列化转换器,该转换器将在构造函数方法中的 jdkserializationredisserializer 类中调用,因为它默认不使用任何验证(它使用 DeserializingConverter)。然后在您的反序列化转换器中,您实现指定预期哪些类的白名单方法。确保您也对它们进行单元测试,因为它们可能具有需要反序列化的依赖类。


推荐阅读