RedisTemplate 导致 Fortify 动态代码评估中的反序列化不安全

问题描述 投票:0回答:2

在制作Spring Redis数据模板时,我使用:

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

然后我还将反序列化器设置为自定义反序列化器,该自定义反序列化器将某些类列入白名单,以防反序列化不安全。

Fortify 不知何故仍然突出:

new RedisTemplate<>();

在输入验证和表示领域内,动态代码评估期间的不安全反序列化。

如何制作RedisTemplate而不被标记?

java deserialization fortify spring-data-redis
2个回答
0
投票

我遇到了同样的问题,Fortify 扫描报告将其标记为“动态代码评估:不安全的反序列化”。添加解决方案,因为我在 StackOverflow 上没有得到正确的解决方案。

初始代码

@Bean
public RedisTemplate redisTemplate() {
    RedisSerializer<String> stringSerializer = new StringRedisSerializer();

    RedisTemplate<?, ?> template = new RedisTemplate<>();
    template.setConnectionFactory(jedisConnectionFactory());
    template.setKeySerializer(stringSerializer);
    template.setValueSerializer(stringSerializer);
    template.afterPropertiesSet();

    return template;
}

问题是由于这条线而发生的

RedisTemplate<?, ?> template = new RedisTemplate<>();

现在,建议使用安全序列化器,我已使用

Jackson2JsonRedisSerializer
来序列化和反序列化对象。我已经在使用
StringRedisSerializer
来表示字符串了。

此外,我初始化了RedisTemplate,从而指定了键和值类型。

解决方案

@Bean
public RedisTemplate<String, Object> redisTemplate() {
    RedisSerializer<String> stringSerializer = new StringRedisSerializer();
    Jackson2JsonRedisSerializer<Object> objectSerializer = new Jackson2JsonRedisSerializer<>(Object.class);

    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(jedisConnectionFactory());
    template.setKeySerializer(stringSerializer);
    template.setValueSerializer(objectSerializer);

    template.setHashKeySerializer(stringSerializer);
    template.setHashValueSerializer(objectSerializer);

    template.setEnableDefaultSerializer(true);
    template.afterPropertiesSet();

    return template;
}

这解决了我的 Fortify 问题。


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.