CERT C++安全编码标准是SEI/CERT制定的实践性C++安全规范,聚焦缓冲区溢出、空指针解引用等高危漏洞,通过内存/整数/并发/异常四类规则及工具集成落地,需嵌入CI与代码审查。
CERT C++ 安全编码标准是由美国卡内基梅隆大学软件工程研究所(SEI/CERT)制定的一套权威性、实践导向的C++安全编程规范。它不是语言标准,而是聚焦于识别和规避C++中常见、高危的安全漏洞模式——比如缓冲区溢出、空指针解引用、未定义行为、竞态条件、资源泄漏、类型混淆等。它的核心目标是:让代码在编译期、运行期更可预测、更健壮、更难被恶意利用。
很多C++安全问题(如use-after-free、integer overflow leading to heap overflow)不会触发编译错误,却可能在生产环境引发崩溃、数据泄露甚至远程代码执行。CERT标准通过具体规则(如“EXP50-CPP: Do not depend on the order of evaluation of function arguments”)、自动化检查建议(支持PC-lint、Clang Static Analyzer、Cppcheck等工具集成)和清晰的合规/违规示例,把抽象的安全原则落地为可执行的编码动作。
std::array/std::vector::at());禁止返回局部对象地址或引用
求在做算术前显式检查溢出(用std::add_overflow等);禁止有符号/无符号混用比较;避免依赖默认整型提升行为std::mutex加锁必须成对且异常安全(用RAII封装)noexcept声明与实际行为一致不靠死记硬背,而要嵌入开发流程:
-Wimplicit-fallthrough、-Wuninitialized,配合自定义规则集)strcpy、gets等禁用函数)std::string_view代替C风格字符串参数;用std::optional表达可能缺失值,而非魔法数字或空指针new/delete”、“是否所有虚函数都带virtual或=default”)基本上就这些。CERT C++不是限制你写代码,而是帮你避开那些“看起来能跑、上线就翻车”的坑。它不复杂,但容易忽略。