Aviso C28726
Uso de API proibido: '*function-name' é inseguro e foi marcado como preterido.
Esse aviso indica que uma função está sendo usada que foi banida e tem uma substituição mais robusta ou segura. Esse erro específico indica que a função proibida tem potencial para estourar um buffer.
Comentários
Uma lista de todas as funções proibidas cobertas por esse erro, por que elas são proibidas e as substituições recomendadas podem ser encontradas após o exemplo a seguir.
Nome da análise de código: BANNED_API_USAGEL2
Exemplo
O seguinte código gera esse aviso:
void example_func()
{
char user_input[10];
scanf(“%s”, input); // scanf is banned for security purposes
}
Isso ocorre devido ao uso da função scanf
não segura . scanf
coloca qualquer limite no tamanho dos dados copiados para o buffer. Para corrigir esse problema, podemos usar scanf_s
, a substituição mais segura para essa função. scanf_s
requer que o desenvolvedor especifique quantos bytes devem ser copiados. scanf_s
garantirá apenas que muitos bytes sejam copiados. Por exemplo, o código a seguir é mais seguro:
void example_func()
{
char user_input[10];
scanf_s(“%9s”, input, sizeof(input)); // 9 bytes leaves room for the \0 byte at the end
}
Funções proibidas
OBSERVAÇÃO: esta lista está sendo atualizada e aprimorada ativamente
API proibida | Substituição(s) | Lógica/Anotações |
---|---|---|
_itoa |
_itoa_s |
Não termina NULL |
_i64toa |
_i64toa_s |
Não termina NULL |
_i64tow |
_i64tow_s |
Não termina 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 |
Detecção de erro limitada |
sscanf |
sscanf_s |
Detecção de erro limitada |
wmemcpy |
wmemcpy_s |
Detecção de erro limitada |
wnsprintfW |
||
wscanf |
wscanf_s |