我使用SonarQube和RATS (粗糙审计工具安全性)对我的嵌入式C代码执行代码分析。应特别注意确保分配在堆栈上的字符数组得到安全使用
Ubuntu下壳,我执行
rats --quiet --xml -w 1 . > ./rats_report.xml
得到将被导入到SonarQube报告。
我得到一些象这样的错误:
Extra care should be taken to ensure that character arrays that are allocated on the stack are used safely. They are prime targets for buffer overflow attacks.
这是函数的代码片段生成错误:
static char* GetQueryStringForValue(const char* valueLabel)
{
static char queryString[QUERY_LEN + 1];
memcpy(queryString, '\0', sizeof(queryString));
snprintf(queryString, sizeof(queryString), "{'%s'", valueLabel);
return queryString;
}
据我所知,这个问题是关系到分配到缓冲区堆栈。
我的问题是:哪种防止缓冲区溢出攻击的最佳做法?
我应该添加特定的控件吗?
感谢您的帮助!
BR, 费德里科
'memcpy'?你在想'memset'吗? 'memcpy'期待第二个参数的指针,而不是整数''\ 0''。 –
奇怪'静态字符查询字符串[QUERY_LEN + 1];'*不*分配在堆栈上。 –
在担心安全性和静态分析之前,请确保代码实际编译并给出预期的结果... – Lundin