我正在开发 C 函数
getCredentials
,并遇到了有关变量 lpass
的 Checkmarx 标志。然而,根据我的理解,lid
和lpass
都本地存储在函数内的堆栈上
void getCredentials(char *id, char *pass) {
char lid[userid_size];
char lpass[pwd_size]; // Flagged in Checkmarx
strncpy(lid, id, userid_size);
strncpy(lpass, pass, pwd_size);
// dbconnect(&dbstruct, lpass, lid);
}
有人可以澄清为什么 Checkmarx 标记
lpass
进行堆检查,这是误报还是存在我忽略的潜在问题?
“堆检查”是关于未加密存储在机器内存中的敏感信息。它到底存储在哪里完全不相关。
敏感信息的任何副本在不再需要时都应立即销毁,否则它可能会在释放、进程死亡以及随后由不同进程分配该内存(可以对其进行检查)的情况下继续存在。
如果您需要临时存储未加密的密码副本,请在使用完毕后立即将其清零。