我是 C 編程的新手。我正在對我的代碼執行 SAST 違規檢查,并且掃描會引發警告:
_tcscpy(destination_array,Source);
在 Source.cpp 檔案的第 58 行發現了危險函式 _tcscpy 正在使用中。此類功能可能會暴露資訊并允許攻擊者完全控制主機
所以相反,現在我不得不使用它使警告消失:
_tcscpy_s(destination_array,_countof(destination_array),Source);
_tcscpy和之間的實際區別是什么_tcscpy_s,它如何使代碼安全?
uj5u.com熱心網友回復:
實際的區別在于_s函式在寫入之前檢查目標緩沖區。如果緩沖區太小,則程式將中止,或者報告錯誤值,具體取決于當前的錯誤處理程式。
當惡意資料以某種特定方式形成以覆寫其他資料并獲得對程式的控制時,這可以防止緩沖區溢位攻擊。
當然,只有在正確傳遞目標緩沖區的大小時,預防才有效。如果沒有,緩沖區溢位和攻擊仍然是可能的。
即使應用程式沒有安全隱患,_s無論如何使用函式來避免難以確定的記憶體損壞錯誤可能很有用。
Visual C 提供了 的模板化版本_tcscpy_s,因此對于陣列而不是
_tcscpy_s(destination_array,_countof(destination_array),Source);
您可以使用
_tcscpy_s(destination_array,Source);
這更安全,因為尺寸是推匯出來的,所以不可能出現錯誤的尺寸。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359976.html
上一篇:ReadFile只在換行后回傳
