G.SAF.FFI.04 禁止使用外部内存不安全函数
【级别】 要求
【描述】
C 语言标准函数库中,存在一些不安全函数(见下)。使用不当容易造成缓冲区溢出等安全漏洞。 Rust FFI 编程中禁止调用外部 C 不安全函数。
以下列出了部分内存操作类不安全函数:
- 内存拷贝函数: memcpy , wmemcpy , memmove , wmemmove
- 内存初始化函数: memset
- 字符串拷贝函数: strcpy , wcscpy , strncpy , wcsncpy
- 字符串拼接函数: strcat , wcscat , strncat , wcsncat
- 字符串格式化输出函数: sprintf , swprintf , vsprintf , vswprintf , snprintf , vsnprintf
- 字符串格式化输入函数: scanf , wscanf , vscanf , vwscanf , fscanf , fwscanf , vfscanf , vfwscanf , sscanf , swscanf , vsscanf , vswscanf .
- stdin流输入函数: gets
对于上面这些不安全函数,在 Rust 中,一般有功能相同的安全函数可供使用。比如:
- 对于内存拷贝和初始化,可以使用
std::mem
模块提供的函数进行处理。 - 对于字符串拼接和格式化输出,可以使用标准库提供的
format!
或println!
等宏函数。 - 对于标准输入流读取,可以使用
std::io::stdin()
对象的相关方法来处理。