跳转到主要内容

安全编码

本文约需 2 分钟阅读

安全编码是指为在软件的设计与实现阶段不引入漏洞而采用的编程方法和原则的总称。 OWASP Top 10 和 CWE/SANS Top 25 中列举的许多漏洞,例如输入校验不足和内存管理错误,都是可以在编码阶段防范的。发布后修复漏洞的成本据称是开发阶段的 30 倍以上,因此「左移」(shift left) 的理念备受重视。在 2025 年的 OWASP Top 10 中,安全设计的缺失位列前茅,从设计阶段就内建安全的要求愈发强烈。

输入校验的遗漏为何不会在功能测试中暴露

输入校验的缺失并不是会让功能停止工作的那类缺陷。只要送来的值符合预期,处理就会正常完成,因此确认软件是否按规格运行的测试全都会通过。只有在收到类型不同的值、极端过长的值,或结构不符合预期的输入时,差异才会显现,而这类输入并不包含在通常的测试数据中。也就是说,校验的遗漏并非以「错误的行为」存在,而是以「没有写出来的代码」存在;在人工审阅中,注意力自然会集中在已写出的处理上,因此容易被漏看。正因为这种性质,机械地列举接收外部输入的位置、逐一比对是否附有校验处理的扫描才是有效的。对指出问题的处理也是如此:只修好被发现的那一处,以同样写法写成的其他位置仍会留下,因此整理好检测规则、使同样的遗漏在此后的提交中会再次被指出,才是不让修正止于一次性的要点。

主要原则与实践

安全编码的基本原则有四条:验证输入 (不信任任何外部输入)、应用最小权限、实现纵深防御,以及采用安全的默认配置。具体来说,可举出防止 SQL 注入的参数化查询、防止 XSS 的输出转义,以及防止缓冲区溢出的边界检查等。

开发现场的实践

在实务中,常见的做法是将静态分析工具 (SAST) 集成到 CI/CD 流水线中,对每次提交自动检测漏洞。 SonarQube 、 Semgrep 、 CodeQL 等工具被广泛使用。不过,仅凭工具无法检测逻辑性漏洞 (例如授权绕过),因此与代码审查并用必不可少。请用强随机密码保护代码仓库和部署环境,防止源代码被非法篡改。

相关术语

这篇文章对您有帮助吗?