深度防御:从严重伤害中拯救自己的教训与软件安全启示

作者通过亲身经历的木工台锯事故,剖析了导致伤害的四个关键错误,并类比软件安全中的深度防御策略,强调在重复性任务中保持专注与多层防护的重要性,以及如何将这些原则应用于日常开发与部署流程。

深度防御:从严重伤害中拯救自己的教训与软件安全启示

作者:Joe Basirico
发布日期:2019年12月16日
阅读时间:3分钟

上周末,我的三根手指被台锯夹住,导致严重的手部伤害:手指被撕裂、指甲被扯掉、骨头断裂。情况相当糟糕,但幸运的是,手部外科医生表示我应该在几个月内完全康复。

作为我自己,这让我开始思考在伤害发生之前我可以做些什么来减轻伤害。我意识到,我为自己的人身安全进行的威胁建模,与我为公司提供的软件安全建议和指导有很多相似之处。在我的案例中,我给自己提出的建议归结为在执行单调任务时保持专注的重要性,以及深度防御的必要性。

我的伤害是由于四个主要错误造成的:

  1. 当天早些时候我在台锯上切割了较大的木块,结果导致事故发生时我切割较小木块时锯片过高。这是错误一。
  2. 像许多台锯用户一样,我很久以前就移除了台锯的锯片护罩,使锯片暴露在外。这是错误二。
  3. 西雅图这里相对较冷,尤其是在我的车库里,所以我在使用锯子时戴了一副工作手套。可能令人惊讶的是,这是错误三。锯子夹住了手套,将我的手拉入锯片,同时猛撞到台面,导致骨头断裂。
  4. 虽然我通常非常注意台锯上的每一次切割,但这次我在进行大量相同的切割,制作大量小木板用于小椅子的座位和靠背,结果我的注意力分散了。这个单调的任务在前两三次切割时完全吸引了我的注意力,但在第12次相同的切割后,我没有像应该那样专注于每一次切割。这是错误四。

这四个错误可以分为两类:首先是在单调任务中保持专注的重要性,无论这是你第一次还是第15次执行;其次是使用深度防御对于安全和保障的重要性,这样当错误不可避免地发生时,风险可以通过其他防御措施来减轻。

我们在软件安全中经常讨论深度防御,例如除了使用参数化查询或存储过程来减轻SQL注入外,正确进行输入验证的重要性。深度防御的另一个例子可能是对服务器上的静态数据进行加密,即使没有直接访问的方法。我可以将同样的思维应用在使用我的台锯上。如果我保留了锯片护罩,摘下手套,并确保在每次切割前调整锯片,我可能不会遭受同样的伤害。

当你变得过于舒适时,错误就会发生。在持续集成和持续部署中,开发人员可能每天多次将代码部署到生产系统。当这种情况发生时,开发人员可能不会像部署过程耗时较长且每六个月才发生一次时那样认真对待部署过程。然而,尽管部署更频繁,但执行正确质量保证和部署卫生的责任水平与较少部署时相同。我可以将同样的思维应用在我的台锯上,确保每一次切割都像第一次那样专注。

在软件安全中,就像在生活中一样,相同的错误可能产生不同的结果。很容易陷入这样的思维:仅仅因为错误尚未发生、漏洞尚未出现或伤害尚未发生,可能性就更小。然而,只要风险行为保持不变,可能性就保持不变。当错误最终发生时,故障、漏洞或伤害的严重程度可能不同。在我的案例中,我非常幸运,伤害后不会留下永久性损伤。在一次漏洞之后,公司可能不会对组织或股价造成永久性损害,但每一个错误都是改进的机会。

我的最终收获?庆幸损害没有更严重,并确保它不再发生。

附:整篇文章是通过口述完成的!(并感谢我的同事Jason的编辑)

请订阅我们的新闻通讯。每个月我们会发送一份新闻摘要以及我们最近几篇文章的链接。不要错过!

分享与讨论

  • 在HackerNews上讨论
  • 在Twitter上分享

归档于
培训、指导

Joe Basirico & Jason Taylor © 2023

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计