我使用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