警告 C28726
禁用 API 使用方式:『*function-name』 不安全,且已標示為已被取代。
這個警告表示正在使用已禁用且更強固或更安全的取代函式。 這個特定錯誤表示禁用函式可能會溢位緩衝區。
備註
此錯誤涵蓋的所有禁用函式清單、為何禁用,以及下列範例之後可以找到建議的取代專案。
程式代碼分析名稱:BANNED_API_USAGEL2
範例
下列程式代碼會產生此警告:
void example_func()
{
char user_input[10];
scanf(“%s”, input); // scanf is banned for security purposes
}
這是因為使用 unsafe 函 scanf
式 。 scanf
會限制複製到緩衝區的數據大小。 若要修正此問題,我們可以使用 scanf_s
,更安全地取代此函式。 scanf_s
需要開發人員指定要複製的位元組數目。 scanf_s
只會確保會複製許多位元組。 例如,下列程式代碼更安全:
void example_func()
{
char user_input[10];
scanf_s(“%9s”, input, sizeof(input)); // 9 bytes leaves room for the \0 byte at the end
}
禁用函式
注意:此清單正在積極更新和改善
禁用 API | 取代 (s) | 合理性 / 附注 |
---|---|---|
_itoa |
_itoa_s |
不會以 NULL 終止 |
_i64toa |
_i64toa_s |
不會以 NULL 終止 |
_i64tow |
_i64tow_s |
不會以 NULL 終止 |
_mbccpy |
_mbccpy_s |
|
_mbscpy |
_mbscpy_s |
|
_mbsnbcpy |
_mbsnbcpy_s |
|
_mbsnbcat |
_mbsnbcat_s |
|
_mbsncat |
_mbsncat_s |
|
_mbsncpy |
_mbsncpy_s |
|
_mbstok |
_mbstok_s |
|
_snscanf |
_snscanf_s |
|
_snwscanf |
_snwscanf_s |
|
_ui64toa |
ui64toa_s |
|
_ui64tow |
_ui64tow_s |
|
_ultoa |
_ultoa_s |
|
CharToOemA |
||
CharToOemBuffA |
||
CharToOemBuffW |
||
CharToOemW |
||
OemToCharA |
||
OemToCharBuffA |
||
OemToCharBuffW |
||
scanf |
scanf_s |
有限的錯誤偵測 |
sscanf |
sscanf_s |
有限的錯誤偵測 |
wmemcpy |
wmemcpy_s |
有限的錯誤偵測 |
wnsprintfW |
||
wscanf |
wscanf_s |