代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
38234 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

38 | 对象序列化的危害有多大?

其他处理和保护敏感信息的方法
避免敏感信息的序列化
序列化技术的安全问题
社会保障号泄露风险
Java代码示例
隐藏的序列化安全问题
其他处理和保护敏感信息的方法
避免敏感信息的序列化
序列化技术的安全问题
保护敏感数据并保持对象实例序列化前后的等价
指定可以序列化的非敏感数据
排除敏感数据的序列化
含有敏感数据的类不支持序列化
Java漏洞与序列化技术的关系
潜在的攻击风险
打包、传输、拆解的关键步骤
社会保障号泄露风险
Java代码示例
小结
评审案例
序列化技术的好处
序列化的定义
Java漏洞与序列化技术的关系
潜在的攻击风险
打包、传输、拆解的关键步骤
保护敏感数据并保持对象实例序列化前后的等价
指定可以序列化的非敏感数据
排除敏感数据的序列化
含有敏感数据的类不支持序列化
隐藏的序列化安全问题
一起来动手
小结
额外的防护
案例分析
评审案例
序列化技术的好处
序列化的定义
对象序列化的危害有多大?
案例分析
额外的防护
一起来动手
对象序列化的危害有多大?

该思维导图由 AI 生成,仅供参考

如果一个函数或者对象,不管它位于多么遥远的地方,都可以在本地直接被调用,那该有多好呀!这是一个非常朴素、美好的想法。基于这个设想,诞生了很多伟大的技术和协议,比如远程过程调用(RPC)、远程方法调用(RMI)、分布式对象(Distributed Object)、组件对象模型(COM)、公共对象请求代理(CORBA)和简单对象访问协议(SOAP)等……这个列表还可以很长很长。
躲在这些协议背后的核心技术之一,就是序列化。简单地说,序列化就是要把一个使用场景中的一个函数或者对象以及它们的执行环境,打包成一段可以传输的数据,然后把该数据传输给另外一个使用场景。在这个使用场景中,该数据被拆解成适当的函数或者对象,包括该函数或者对象的执行环境。这样,该函数或者对象就可以在不同的场景下使用了。
数据拆解的过程,就是反序列化打包、传输、拆解是序列化技术的三个关键步骤。由于传输的是数据,打包和拆解可能使用不同的编程语言,运行在不同的操作系统上。这样就带来了跨平台和跨语言的好处。而数据能够传输,就意味着可以带来分布式的好处。数据当然也可以存储,而可以存储意味着相关对象的生命周期的延长,这是不是也是一个非常值得兴奋的特点?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

序列化技术的美好想法带来了众多技术和协议,但也存在着潜在的安全风险。本文以Java语言为例,探讨了序列化技术可能带来的问题,并提出了相应的防护措施。序列化过程中可能泄露敏感数据,导致数据被篡改,甚至与大约一半的Java漏洞有关。针对这些问题,文章提出了不支持序列化、排除敏感数据、指定可序列化字段等防护方法。此外,还介绍了实现writeObject、writeReplace和Externalizable接口等方法。总之,文章强调了序列化技术的安全问题,并提出了多种防护措施,以应对可能的安全风险。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 杨孔来
    如果不用序列化,有哪些替代方案

    作者回复: HTTP/Web

    2019-04-01
    6
  • 唐名之
    那我们平常用的rpc 框架dubbo也会有这个序列化安全问题吧,如果想加上签名验证感觉成本又比较大

    作者回复: RPC一般要求在可信任的环境下使用。 检查使用环境,看看能不能切断外部修改、监听的可能性。

    2019-04-19
    4
  • hua168
    1. 习题:birthday和socialSecurityNumber是敏感数据,不能序列化。 2. 现在序列化不是用json格式比较多吗,好处,可以跨语言、平台 3. 如果用序列化的话,数据传输用https+token(JSON Web Token)会不会解决?

    作者回复: #3,双向认证,数据加密的场景可以。

    2019-04-03
    4
  • Jerry Chan
    不能序列化,能保存翻数据库里面去吗?

    作者回复: 保存到数据库里,其实也是一种序列化的形式。 这样的设计,需要把对象和数据库保护起来,切断中间攻击的机会。

    2019-04-14
    2
  • alan
    老师好,请教一个问题,我没有接触过Java,平时主要用Golang,用到了大量的json.Marshal方法,我平时管这个也叫序列化。不知老师是否了解json.Marshal,这跟Java的序列化有什么区别吗,还是只是恰好同名?

    作者回复: 序列化是一个运用广泛的技术,不独Java有。序列化的问题也有普遍性。不过,不同的对象,使用的场景不同,所以威胁也有很大区别。我没有研究过JSON的序列化,抱歉不能给你更多的建议。

    2019-04-01
    2
  • 小钟
    请问老师 https不能解决这个问题吗?

    作者回复: 可以的,双向认证的HTTPS或者TLS可以搭建一个可信的环境。

    2019-07-14
    1
  • KingSwim
    不能加密之后系列化么,然后拿到数据解密再反系列化?

    作者回复: 可以,但是两端要持有相同的密钥。密钥的协商和分享很困难。

    2019-04-01
  • ifelse
    序列化技术不是一个有安全保障的技术,序列化数据的传输和拆解过程都可能被攻击者利用;要尽量避免敏感信息的序列化。--记下来
    2022-08-01归属地:浙江
  • ifelse
    社会信用代码和生日不要序列化
    2022-08-01归属地:浙江
  • 丁丁历险记
    之前做redo undo 都用的序列化。还好每步操作都要重新鉴权
    2019-10-15
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部