代码精进之路
范学雷
Oracle首席软件工程师,Java SE安全组成员,OpenJDK评审成员
立即订阅
6350 人已学习
课程目录
已完结 47 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你写的每一行代码,都是你的名片
免费
第一模块:代码“规范”篇 (16讲)
01 | 从条件运算符说起,反思什么是好代码
02 | 把错误关在笼子里的五道关卡
03 | 优秀程序员的六个关键特质
04 | 代码规范的价值:复盘苹果公司的GoToFail漏洞
05 | 经验总结:如何给你的代码起好名字?
06 | 代码整理的关键逻辑和最佳案例
07 | 写好注释,真的是小菜一碟吗?
08 | 写好声明的“八项纪律”
09 | 怎么用好Java注解?
10 | 异常处理都有哪些陷阱?
11 | 组织好代码段,让人对它“一见钟情”
12丨组织好代码文件,要有“用户思维”
13 | 接口规范,是协作的合约
14 | 怎么写好用户指南?
15 | 编写规范代码的检查清单
16丨代码“规范”篇用户答疑
第二模块:代码“经济”篇 (14讲)
17 | 为什么需要经济的代码?
18丨思考框架:什么样的代码才是高效的代码?
19 | 怎么避免过度设计?
20 | 简单和直观,是永恒的解决方案
21 | 怎么设计一个简单又直观的接口?
22丨高效率,从超越线程同步开始!
23 | 怎么减少内存使用,减轻内存管理负担?
24 | 黑白灰,理解延迟分配的两面性
25 | 使用有序的代码,调动异步的事件
26 | 有哪些招惹麻烦的性能陷阱?
27 | 怎么编写可持续发展的代码?
28 | 怎么尽量“不写”代码?
29 | 编写经济代码的检查清单
30丨“代码经济篇”答疑汇总
第三模块:代码“安全”篇 (14讲)
31 | 为什么安全的代码这么重要?
32 | 如何评估代码的安全缺陷?
33 | 整数的运算有哪些安全威胁?
34 | 数组和集合,可变量的安全陷阱
35 | 怎么处理敏感信息?
36 | 继承有什么安全缺陷?
37 | 边界,信任的分水岭
38 | 对象序列化的危害有多大?
39 | 怎么控制好代码的权力?
40 | 规范,代码长治久安的基础
41 | 预案,代码的主动风险管理
42 | 纵深,代码安全的深度防御
43 | 编写安全代码的最佳实践清单
44 | “代码安全篇”答疑汇总
加餐 (1讲)
Q&A加餐丨关于代码质量,你关心的那些事儿
结束语 (1讲)
结束语|如何成为一个编程好手?
代码精进之路
登录|注册

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

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

评审案例

让我们一起来看一段节选的 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《代码精进之路》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

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

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

    2019-04-09
    3
  • icejoywoo
    手机验证码可以用邮件来收取,很多账号体系注册用了邮箱,还有就是人脸或者安全问题之类的,最近的操作也可以证明用户,隐私个人信息等
    2019-07-29
    1
  • lcc
    容灾架构:主从库、熔断器等
    2019-06-25
    1
  • hua168
    如果是我们写代码,我们都基本用框架(如spring)去实现的,不用双引擎和降落伞吧,像我们日常web开发,什么情况下才会用这些。

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

    2019-04-08
    1
  • Farewell丶
    我们公司的支付系统,接入支付是多种支付方式的,就算是同一个支付方式,有的也会有多个渠道,比如微信我们除了官方,还会有其它渠道也提供微信支付,优先使用费率低的那个,故障时人工加手动都可以切换。另外当某一个支付方式暂时全部不可用时,还可以人工下线,对用户屏蔽。让相关人员快速修复,并减少故障造成的无效请求以及流量。
    2019-11-10
  • 丁丁历险记

     1 小到大厦电梯至少两个。
     2 大到铁路 ,高速 的干线 ,往往两到三个。
    2019-10-16
收起评论
6
返回
顶部