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

41 | 预案,代码的主动风险管理

合作学习
代码安全
风险防范设计
应急预案
双引擎设计
软件设计抗风险能力
JDK的应急方案
应急预案
TLS协议发展
双引擎设计
延程飞行
RC4算法安全漏洞
BEAST攻击后果
TLS 1.0设计
BEAST攻击
Android系统修改
Cipher Suites
Java代码变更
预案
风险管理
保持代码长治久安
一起来动手
小结
降落伞,权宜之计
双引擎,长远之计
案例分析
评审案例
代码的风险预案
代码规范
预案,代码的主动风险管理

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

上一次,我们聊了保持代码长治久安的基础——代码规范。这一次,我们接着聊第二个方面,代码的风险预案。
有些问题,并没有适用于各种场景的解决办法;有些设计,并不能适用于所有的用户;有些实现,并不能经受过去、现在和未来的检验。在你的日常工作中,有没有这样的情况出现?
做好预案,是我们管理风险的一个很重要的手段。代码的安全管理,也需要预案。

评审案例

让我们一起来看一段节选的 Java 代码变更。
public static String[] getDefaultCipherSuites() {
- int ssl_ctx = SSL_CTX_new();
- String[] supportedCiphers = SSL_CTX_get_ciphers(ssl_ctx);
- SSL_CTX_free(ssl_ctx);
- return supportedCiphers;
+ return new String[] {
+ "SSL_RSA_WITH_RC4_128_MD5",
+ "SSL_RSA_WITH_RC4_128_SHA",
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
// snipped
+ };
}
对于这段代码,我先做一些说明。其中,“Cipher Suites”指的是我们在前面一篇文章中提到的 TLS 协议的密码算法族, “SSL_RSA_WITH_RC4_128_MD5”是一种基于 RC4 加密技术的算法族,“TLS_RSA_WITH_AES_128_CBC_SHA”是一种基于 CBC(Cipher Block Chaining,链式加密)模式的算法族。
getDefaultCipherSuites() 这个方法返回值的顺序,就是 TLS 协议使用这些算法的优先级别。比如,变更后的代码,“SSL_RSA_WITH_RC4_128_MD5”算法族具有最高的优先级。相应地, “SSL_RSA_WITH_RC4_128_SHA”具有第二优先级。在安全传输的连接中,优先级靠前的算法会获得优先考虑。 一旦优先的算法被采用,其他的算法就不会被使用了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过分析Java代码变更案例,探讨了代码风险预案的重要性。首先介绍了一个Java代码变更案例,讨论了对TLS协议算法的优先级别进行修改的前瞻性。随后,通过分析TLS 1.0的设计和对RC4算法的使用,强调了设计的周到性和巧合性。然而,随着RC4算法的安全漏洞被公开,文章指出了写死TLS协议算法优先级的问题,以及产品升级的复杂性。最后,文章强调了一个好的设计需要有双引擎和降落伞,以应对世事无常。通过这些案例分析,读者可以深刻理解代码风险预案的重要性,以及设计中需要考虑到未来可能出现的风险,从而提高代码的安全性和稳定性。文章以飞机双引擎和降落伞的设计理念为比喻,强调了软件设计中需要考虑长期的双引擎设计和权宜的应急预案。文章提出了对软件架构和设计中的风险防范设计进行研究的请求,呼吁读者共同创作和学习其中的经验。

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

全部留言(9)

  • 最新
  • 精选
  • 我来也
    像我公司的业务———休闲网络游戏,就有设计备用入口。 因为现在域名劫持,用户所在的小运营商网络,某个服务器被攻击,都会导致部分用户无法正常连上服务器。 我们会在客户端中预留一些连接入口,在极端情况下尝试去实用备用线路。 以前也会有选择最优线路的方案。

    作者回复: 谢谢提供这么好的一个用例。

    2019-04-09
    6
  • hua168
    如果是我们写代码,我们都基本用框架(如spring)去实现的,不用双引擎和降落伞吧,像我们日常web开发,什么情况下才会用这些。

    作者回复: 框架当然不能解决所有的安全问题,什么样预案,依赖具体的应用。这没有什么统一的答案。虽然我知道有一个统一的答案该有多好,但是就是没有统一的答案,因为没有统一的场景。

    2019-04-08
    5
  • 丁丁历险记
    1 小到大厦电梯至少两个。 2 大到铁路 ,高速 的干线 ,往往两到三个。
    2019-10-16
    4
  • Farewell丶
    我们公司的支付系统,接入支付是多种支付方式的,就算是同一个支付方式,有的也会有多个渠道,比如微信我们除了官方,还会有其它渠道也提供微信支付,优先使用费率低的那个,故障时人工加手动都可以切换。另外当某一个支付方式暂时全部不可用时,还可以人工下线,对用户屏蔽。让相关人员快速修复,并减少故障造成的无效请求以及流量。
    2019-11-10
    3
  • ifelse
    我们总是尽最大的可能使得软件程序简化、简化再简化。可是对于生死攸关的风险点,我们有时需要选择相反的方向,强化、强化再强化。--记下来
    2022-08-02归属地:浙江
    2
  • icejoywoo
    手机验证码可以用邮件来收取,很多账号体系注册用了邮箱,还有就是人脸或者安全问题之类的,最近的操作也可以证明用户,隐私个人信息等
    2019-07-29
    2
    2
  • lcc
    容灾架构:主从库、熔断器等
    2019-06-25
    1
  • ifelse
    学习了
    2022-08-02归属地:浙江
  • aoe
    一般只能去柜台了(现在柜台办理业务也要验证码)。 现在也可以通过人脸识别操作账户 现实中正确的做法:先打电话冻结账户
    2022-01-05
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部