当前位置: 首页 > news >正文

Dubbo3序列化安全问题

序列化安全

在 Dubbo 3.0 中,序列化协议的安全性得到了加强。

1. 序列化安全性升级

  • Triple 协议:

    • 推荐使用 Triple 协议 的非 Wrapper 模式,该模式在安全性上更为严格。
    • 需要开发人员编写 IDL(接口描述语言)文件,这虽然增加了开发的复杂性,但提高了序列化的安全性。
    • 默认情况下,该协议是安全的,因此适合高安全性需求的应用场景。
  • Wrapper 模式:

    • 允许与其他序列化数据兼容,提供更好的兼容性,但在安全性方面可能存在潜在风险。
    • 对于 Hessian2 协议,推荐高安全属性的用户开启白名单模式,以限制可反序列化的类。
    • 默认情况下,框架开启了黑名单模式,拦截恶意调用,以增强安全性。

2. 安全性最佳实践

  • 开启 Token 鉴权机制:
    • 必须使用其他序列化协议的应用,建议开启 Token 鉴权机制,以防止未授权请求对 Provider 的安全威胁。
    • 启用 Token 鉴权时,还需要同时开启注册中心的鉴权功能,以确保整个调用链的安全性。

3. 推荐措施

  • 根据需求选择协议:

    • 如果应用对安全性要求高,建议优先考虑使用 Triple 协议的非 Wrapper 模式。
    • 对于需要兼容性但安全性要求相对较低的场景,可以使用 Wrapper 模式,但需要开启安全机制。
  • 编写 IDL 文件:

    • 对于使用 Triple 协议的项目,建议认真编写 IDL 文件,确保接口的清晰和安全性。
  • 使用 Token 鉴权:

    • 确保在项目中实现 Token 鉴权,确保请求来源的可靠性。

4. 总结

  • Dubbo 3.0 在序列化安全方面的加强是为了应对日益严峻的安全挑战,开发者需要根据实际需求选择合适的序列化协议,并注意实现必要的安全措施,以保护服务的安全性和完整性。

类检查机制概述

特性说明
  • 类检查机制确保服务提供者与消费者之间的兼容性和安全性,防止因类版本不匹配、方法签名不兼容或类缺失而引发的问题。
使用场景
  • 适用于需要维护版本兼容性和安全性的场合,尤其是在微服务架构中,多个服务可能会涉及不同版本的类。

使用方式

  • 该机制自 Dubbo >= 3.1.6 开始支持,适用于 Hessian2、Fastjson2 序列化和泛化调用,其他序列化方式暂不支持。

检查模式

  • 检查模式分为三个级别:

    • STRICT(严格检查):
      • 禁止反序列化所有不在允许序列化列表(白名单)中的类。
    • WARN(告警):
      • 禁止序列化所有在不允许序列化列表(黑名单)中的类,同时在反序列化不在允许序列化列表(白名单)中的类时,记录告警日志。
    • DISABLE(禁用):
      • 不进行任何检查。
  • 默认配置:

    • 3.1 版本中,默认为 WARN 级别。
    • 3.2 版本中,默认为 STRICT 级别。 

配置方式

  • 通过 ApplicationConfig 配置:

    ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setSerializeCheckStatus("STRICT");
  • 通过 Spring XML 配置:

  • <dubbo:application name="demo-provider" serialize-check-status="STRICT"/>
  • 通过 Spring Properties / dubbo.properties 配置:

    dubbo.application.serialize-check-status=STRICT
  • 通过 System Property 配置:

    -Ddubbo.application.serialize-check-status=STRICT
  • 日志提示:

    • 配置成功后,可以在日志中看到类似以下的提示:
INFO utils.SerializeSecurityManager: [DUBBO] Serialize check level: STRICT

注意事项

  • 在同一进程(Dubbo Framework Model)下,如果多个应用配置了不同的检查模式,最终将生效“最宽松”的级别。例如,若一个配置为 STRICT,另一个为 WARN,则最终生效 WARN 级别。

Serializable 接口检查

  • 检查模式:

    • 分为两个级别:
      • true:开启检查,拒绝反序列化所有未实现 Serializable 的类。
      • false:关闭检查。
  • 默认配置:

    • Dubbo 中默认配置为 true 开启检查。
  • 配置方式:

    • 通过 ApplicationConfig 配置:

      ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setCheckSerializable(true);
    • 通过 Spring XML 配置:

      <dubbo:application name="demo-provider" check-serializable="true"/>
    • 通过 Spring Properties / dubbo.properties 配置:

      dubbo.application.check-serializable=true
    • 通过 System Property 配置:

      -Ddubbo.application.check-serializable=true
  • 日志提示:

    • 配置成功后,可以在日志中看到类似以下的提示:
INFO utils.SerializeSecurityManager: [DUBBO] Serialize check serializable: true

注意事项

  • 在同一进程下,如果多个应用配置了不同的 Serializable 接口检查模式,最终生效“最宽松”的级别。
  • 目前尚未打通 Hessian2、Fastjson2 内置的 Serializable 检查配置。
  • 对于泛化调用,仅需配置 dubbo.application.check-serializable 修改检查配置。
  • 对于 Hessian2 序列化,需要同时修改 dubbo.application.check-serializabledubbo.hessian.allowNonSerializable 两个配置。
  • 对于 Fastjson2 序列化,目前暂不支持修改。

总结

  • 类检查机制和 Serializable 接口检查是 Dubbo 3.0 为了提升安全性和兼容性而引入的重要特性。合理配置这些检查机制,可以有效防止因类版本不匹配和反序列化风险而带来的潜在问题。在开发和部署微服务时,建议根据应用需求合理配置相应的检查模式和接口检查。

相关文章:

  • 【有啥问啥】OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律:原理与应用详解
  • CentOS7更换阿里云yum更新源
  • Python习题 191:将英文句子转为每个单词组成的列表
  • 从 HDFS 迁移到 MinIO 企业对象存储
  • (2)leetcode 234.回文链表 141.环形链表
  • 【最佳实践】配置类封装-RestTemplate详解
  • 【C/C++语言系列】浅拷贝和深拷贝
  • 动手学深度学习(五)循环神经网络RNN
  • Docker实操:安装MySQL5.7详解(保姆级教程)
  • 求和(2)
  • 北疆自驾旅行规划
  • docker挂载宿主机文件run命令启动报错
  • Docker+PyCharm远程调试环境隔离解决方案
  • Java I/O终极指南:BIO, NIO, AIO深度剖析
  • C++_CH18_构造函数与析构函数
  • 常见的反爬虫和应对方法
  • Lodash的特点和功能
  • Linux(4)--CentOS8虚拟机下联网
  • 在线查看 Android 系统源代码 AOSPXRef and AndroidXRef
  • python的6种常用数据结构
  • 上海145家博物馆、73家美术馆将减免费开放
  • 中巡组在行动丨①震慑:这些地区有官员落马
  • 西北大学副校长成陕西首富?旗下巨子生物去年净利超20亿,到底持股多少
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准
  • 《审判》|“被告”的魅力:K在等什么?
  • 历史地理学者成一农重回母校北京大学,担任历史系教授