Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

安全是共同责任

复习

  • 契约、错误与异常:明确校验输入、处理失败
  • 可靠性与故障处理:假设问题会发生
  • 网络:攻击者会不断寻找突破口

TL;DR

  • 安全不是某一个人的事,而是每个环节的共同责任
  • 输入验证、最小权限、纵深防御是基本功
  • 安全应在设计之初就考虑,而非事后打补丁
  • 任何便利,都可能带来风险

正文

  软件要长期服务,就必须面对一个不友好的现实:总有人在试图利用它。 而安全这件事,最忌讳的想法是“安全是安全工程师的事”。事实是——它是每一个参与者的共同责任。

谁都有份

  安全的责任,散落在每个环节里:

  • 开发者:不能写出可被利用的漏洞
  • 运维者:要正确配置、及时打补丁
  • 使用者:要保持警惕、不乱点乱填

  任何一个环节掉链子,整条防线都会被打穿。所以,“安全是共同责任”不是一句口号,而是这套系统的真实结构。

三样基本功

  软件安全有一些反复出现的基本功:

  • 输入验证:永远不要相信外部输入。用户填的、网络传的、文件读的,都要校验、过滤,别直接拿来用
  • 最小权限:只给程序或账号完成工作所必需的权限,出了事破坏范围也小
  • 纵深防御:不要指望一道防线。多层设防,任何一层失守,还有下一层兜底

  这三样,我们在讲网络安全时都见过。它们之所以反复出现,是因为真正有效的安全,靠的从来不是某个绝招,而是一套扎实的习惯。

安全要“从设计开始”

  还有一个关键观念:安全要在设计之初就考虑,而不是等到出事再打补丁。

  事后补漏往往很被动:漏洞可能已经被利用,修复还可能牵一发而动全身。而在设计时就考虑信任边界、数据保护、权限控制,代价小得多,效果也好得多。

  同时要牢记:没有绝对的安全。 你能做的,是不断提高攻击者的成本,把风险控制到可接受的程度。这又是那句老话——任何便利都伴随风险,关键是权衡。

思考题 1

  为什么说“安全是共同责任”?

思考题 2

  “最小权限”和“输入验证”,分别防的是什么?

小结

知识点

  • 安全是开发者、运维者与使用者共同的责任
  • 基本功:输入验证、最小权限、纵深防御
  • 安全应在设计之初考虑
  • 没有绝对安全,只能控制风险

参考资料

  1. Wikipedia(zh):计算机安全:保护系统免受攻击
  2. Wikipedia(zh):最小权限原则:只授予完成工作所必需的权限

思考题答案(仅供参考)

思考题 1

  因为软件的安全依赖多个环节:开发者不写漏洞、运维者正确配置并及时修补、使用者保持警惕。任何一环出问题都可能被打穿,所以安全不是某个角色的专属,而是所有参与者共同的责任。

思考题 2

  最小权限防的是“被攻破后的破坏范围”:即使某部分被利用,它也做不了超出职责的事。输入验证防的是“不可信的外部数据”:用户、网络、文件传来的内容都要校验,避免恶意或非法输入被直接使用而引发问题。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪