SEI CERT编码标准是由Carnegie Mellon University软件工程研究所的软件工程研究中心(SEI)制定的一套编码规范。
以下是SEI CERT编码标准的简要列表:
- 规则01:声明和初始化
- 规则02:表达式
- 规则03:整型
- 规则04:浮点数
- 规则05:转换
- 规则06:表达式的类型
- 规则07:指针
- 规则08:数组
- 规则09:结构体和联合体
- 规则10:错误处理
- 规则11:输入输出(I/O)
- 规则12:表达式与语句
- 规则13:并发
- 规则14:代码库和头文件
- 规则15:宏
- 规则16:文件操作
- 规则17:内存管理
- 规则18:可读性
- 规则19:错误处理
- 规则20:安全敏感
- 规则21:库函数
- 规则22:POSIX(可移植操作系统接口)
- 规则23:Java
- 规则24:C++
- 规则25:C#
- 规则26:Perl
- 规则27:Python
以下是SEI CERT编码标准中各类规则的简要描述:
- 规则01:声明和初始化 - 关注变量声明和初始化的规范方式,包括变量声明顺序、初始化和赋值的一致性等。
- 规则02:表达式 - 强调编写清晰、简洁和可读的表达式,避免复杂的嵌套和不明确的操作符优先级。
- 规则03:整型 - 规范整型变量的使用,包括不同整型类型之间的转换、有符号和无符号整数的使用等。
- 规则04:浮点数 - 强调浮点数的精确性和一致性,涵盖浮点数的舍入、舍入模式和异常处理等方面。
- 规则05:转换 - 规范类型转换的使用,包括显示和隐式转换的限制、数据精度丢失的处理等。
- 规则06:表达式的类型 - 关注表达式中混合类型的规范,包括不同类型操作数的转换和一致性。
- 规则07:指针 - 强调指针的正确使用,包括指针的声明、初始化、解引用和空指针检查等。
- 规则08:数组 - 规范数组的声明、初始化、访问和越界检查,确保数组的正确使用。
- 规则09:结构体和联合体 - 强调结构体和联合体的正确使用,包括成员的声明和初始化、访问和内存对齐等方面。
- 规则10:错误处理 - 强调在程序中处理错误和异常的规范方式,包括错误码的处理、异常捕获和处理、错误信息的输出等。
- 规则11:输入输出(I/O) - 规范程序中输入和输出操作的安全性和正确性,包括文件操作、格式化输入输出和输入验证等。
- 规则12:表达式与语句 - 强调编写简洁、可读性强的表达式和语句,避免复杂的逻辑结构和冗长的代码。
- 规则13:并发 - 关注多线程和并发编程的规范,包括线程同步、互斥和临界区的使用,以及并发编程的常见陷阱和问题。
- 规则14:代码库和头文件 - 强调代码库和头文件的规范和组织方式,包括命名空间的使用、头文件的包含保护和依赖管理等。
- 规则15:宏 - 规范宏的使用,包括宏的命名规则、宏定义的正确方式、宏参数的处理等。
- 规则16:文件操作 - 强调对文件的安全访问和操作,包括文件打开和关闭、文件指针的移动和文件权限的设置等。
- 规则17:内存管理 - 关注动态内存的规范使用,包括内存分配和释放、内存泄漏和悬挂指针的处理等。
- 规则18:可读性 - 强调编写清晰、易读和易理解的代码,包括良好的命名、适当的注释和代码风格的规范等。
- 规则19:错误处理 - 强调错误处理的规范方式,包括错误检测和报告、错误恢复和资源清理等。
- 规则20:安全敏感 - 关注安全相关的编码规范,包括缓冲区溢出、代码注入、格式化字符串漏洞等安全问题的预防和修复。
- 规则21:库函数 - 规范使用标准库函数的方式,包括正确的参数传递、返回值处理和错误检测等。
- 规则22:POSIX(可移植操作系统接口) - 强调使用POSIX接口的规范方式,包括线程、进程、文件和网络操作等。
- 规则23:Java - 关注Java编码的规范,包括命名规则、异常处理、线程安全和Java特定的陷阱和问题等。
- 规则24:C++ - 强调C++编码的规范,包括面向对象编程、运算符重载、模板使用和异常处理等。
- 规则25:C# - 规范C#编码的方式,包括命名规则、属性和事件、异常处理和线程安全等。
- 规则26:Perl - 强调Perl编码的规范,包括变量声明和使用、字符串处理、文件操作和正则表达式等。
- 规则27:Python - 关注Python编码的规范,包括命名规则、异常处理、迭代和循环、模块和包的组织等。
SEI CERT Coding Standards - CERT Secure Coding - Confluence
https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards