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

31 | 为什么安全的代码这么重要?

漏洞的修复时间窗口
漏洞修复版本发布
安全漏洞的破坏性
安全修复版本的重要性
保密漏洞
通知软件供应商
Apache Struts 2漏洞
HTTP请求解析
安全更新的执行
公司的安全更新策略
信息安全与软件代码漏洞的关系
代码漏洞导致的安全事故
Equifax的教训
安全研究者的做法
文件上传漏洞
公司的安全更新策略和执行
公司获取安全漏洞信息和安全更新信息的途径
使用最新版本软件的习惯
安全更新的策略和执行
安全漏洞的细节暴露
安全更新的重要性
常见的编写安全代码的原则和实践
安全漏洞的威胁衡量
编写安全的代码
安全漏洞案例
讨论区问题
安全修复版本的重要性
安全模块
为什么安全的代码这么重要?

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

从今天开始,我们进入本专栏的“安全模块”。首先,我们通过一个具体的安全漏洞的案例,来感受下计算机代码是多么的脆弱,以及编写安全的代码为什么如此重要。

评审案例

在 Web 开发中,“multipart/form-data“类型经常被用来上传文件。比如下面这段描述表单的代码,就是使用 multipart/form-data 上传文件的一段 HTML 代码。
<FORM action="http://upload.example.com/"
enctype="multipart/form-data"
method="post">
<P>
Upload the file: <INPUT type="file" name="upload-file"><BR>
<INPUT type="submit" value="Send">
</FORM>
文件上传的操作,会被浏览器解析成类似下面的 HTTP 请求。
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="upload-file"; filename="myfile.txt"
Content-Type: text/plain
... contents of myfile.txt ...
--AaB03x--
Web 服务器接收后,会解析这段请求,然后执行相关的操作。下面的这段代码,是 2017 年 3 月之前 Apache Struts 2 解析“multipart”请求的实现。
其中,蓝色标注的代码,LocalizedTextUtil.findText(),用来查找错误的本地化信息。如果“multipart”请求解析出错,就会触发这个方法。它的规范大致如下:
对于 LocalizedTextUtil.findText() 的规范,我们要留意蓝色字体的部分。这一部分告诉我们,如果信息里包含了 OGNL(Object Graph Navigation Language)的表达式,表达式会被执行。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了安全代码的重要性,并通过具体的安全漏洞案例展示了计算机代码的脆弱性。文章首先介绍了一个关于Web开发中文件上传操作的安全漏洞案例,强调了编写安全代码的重要性。随后,文章详细分析了该安全漏洞的评审案例和真正的威胁,以及Equifax公司因未及时升级安全修复版本而遭受的严重后果。最后,文章提出了编写安全代码的重要性,并给出了三点启示。总的来说,本文通过具体案例向读者展示了安全代码的重要性,强调了安全修复版本的及时更新以及安全漏洞的破坏性。文章内容丰富,技术性强,对于读者了解安全代码的重要性和相关案例具有很高的参考价值。文章还就安全更新的重要性、安全漏洞信息获取、安全更新策略等问题展开了讨论,为读者提供了深入思考的机会。

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

全部留言(9)

  • 最新
  • 精选
  • 流光奕然
    我是公司产品安全部的 第一个问题,过期版本一定要尽快升级,刚刚暴露的漏洞,业界往往称为1day漏洞。这种漏洞如果是高危的话会给公司造成极大的损失。比如方面的openssl心脏滴血,造成无数网站的敏感信息泄露。 第二个问题,这只能依赖我们安全人员及时从各大媒体,安全厂商,主流厂商的官网和美国国家漏洞库搜集cve漏洞。 第三个问题,一旦发现最新漏洞,往往依赖我们安全人员发布漏洞紧急预警,业界称为sirt,然后通过内部预警系统下发整个公司,每个产品会有相应的产品安全接口人,及时反馈相应影响范围和修复情况。

    作者回复: 谢谢分享。 第三点是很好的经验!反过来,也要有接受漏洞报告的简单、通畅的渠道。

    2019-06-28
    9
  • 天佑
    在美国,包括社会保障号、出生日期在内的信用记录是高度敏感的信息。有了这些信用记录,一个人不用出面,甚至不需要支付一分钱,就可以买车、买房、申请信用卡。 老师这个属实吗,难道他们不核实下是否是本人?

    作者回复: 属实,美国高度依赖个人的敏感信息和信用记录。中国现在很多事情也可以靠验证类似的敏感信息完成,这就是互联网商业的基础之一啊。

    2019-04-14
    2
  • hua168
    如果升级是最简单,最基础的维护的话,那我只能怎么方便怎么来了,要不然我们一个月都是在升级了😂 目前想到方法: 1. 能yum(centos)的绝不源安装! 优点:升级快,缺点:版本不能退回, 反正要保持最新,先测试好再升 2. 能有现成最新版本的docker就直接下,或者有多个客户环境相同的自己制作docker 3. 与开发沟通能不用插件尽量不用,能用常用的函数尽量用常用,这样就做到升级修改量小,运维升级也方便

    作者回复: 这些都是好办法! 怎么简单,怎么依赖少,怎么稳定就怎么来。

    2019-03-18
    2
    2
  • hua168
    老师,像第三方源软件(linux系统)漏洞只能通过升级版本来解决吗? 比如,我前公司客户是国企偏多,对方购买有安全评估系统,维护多了,就一条“要始终保持最新版本”,几乎每月都要升级nginx、redis、mysql、php等到最新版本,如果不升级对方直接服务器不用我们系统😂,版本跨度大还要重写代码😂调试,有些函数新版本放弃了!我们运维和开发都叫苦,国企钱不好赚… 能有什么解决方案吗?比如 1.能不对外开放就尽量不放开,像redis、mysql即使有严重bug,但我不对外,只能本机(再不行就局域网)能访问… 2.必须对外开放的:统一在前面在一层安全层,访问网站后先统一做安全过滤,安全了再放行请求。

    作者回复: 还有一种方式,是升级版本发布之前,就把漏洞解决掉,特别是已经披露尚未修复的漏洞。不过,这种方式需要更专业的知识,更复杂的操作。一般地,我们没有这个能力掌握这么多的技能。 短期内,升级到最近的安全修复版就可以了。安全修复版一般会严格地考虑兼容性问题,升级的麻烦相对较小。 长期看,要升级到最新的版本。 因为老版本的生命周期迟早要结束。早升级早受益,早升级麻烦少。 如果累计好几个版本再升级,那时候的麻烦事更多,更难缠。 升级版本是最省事最简单的办法,其他的办法都比这个复杂。 对外不开放看起来是个好思路,不过怎么定义和管理内外,是个天大的麻烦事。比如说,公司外面的人员算不算外?公司的合作伙伴算不算外?财务部算不算外?另外一个研发团队算不算外?一个研发团队里,小李算不算外?不联网的本机是一个独立的个体,可是操作机器的人算不算外?防内奸的复杂度,远远超出我们的想象。 比如说,机器A不联网,只有公司CEO的账户可以操作机器A的特定功能。 机器A五年没有更新了。 由于机器A存在安全漏洞,几乎每个人都知道该怎么不使用CEO的账户,就可以获得CEO的权限。CEO也知道这个问题,但是就是不升级。有什么办法保持机器A可用还要防止别人使用吗(甚至还要防止CEO使用)?办法是有的。可是,很可能到最后,防内奸的管理制度可能搞得每个人都人心惶惶。一旦内奸没防住(当然防不住),人人都可能是受害者。 前置一个安全层,能起到的作用很小。很多代码的错误,攻击可以通过正常的业务逻辑和数据进行,前置的安全层在理论上,是不可能阻断这样的攻击的。 升级是最简单、最基本的运维,一定要做到,不要在这方面妥协。

    2019-03-16
    2
  • 天佑
    老师,有没有在打补丁的最佳实践,比如升级后的兼容性,可用性,性能方面的验证,这方面讲不清楚,就不敢打,阻力往往也在这块。

    作者回复: 是的,验证是最大的阻力。其实这类似于给代码打补丁,JDK的办法主要是依靠自动化的回归测试。

    2019-03-17
    1
  • godliness
    最近学完老师的《实用密码学》,再结合HTTPS,真的受益匪浅,感谢老师,遗憾的是缺少非对称部分。 想请教下老师,安全这个方向,它的成长路线,或者学习路线,您能再给分享点经验吗?
    2023-12-08归属地:湖北
  • ifelse
    学习了
    2022-07-28归属地:北京
  • ifelse
    大部分的安全事故(80%-90%)是由软件的代码漏洞引起的。没有安全保障的代码,是随时都可以坍塌的空中楼阁。--记下来
    2022-07-28归属地:陕西
  • 第一装甲集群司令克莱斯特
    Struts2走下神坛,这个安全漏洞也不是无辜的。
    2021-08-18
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部