Skip to content

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() 对象的相关方法来处理。