funcionalidades de segurança no CRT
Muitas funções de CRT antigas têm versões mais recentes e mais seguras. Se existir uma função segura, a versão mais antiga e menos segura será marcada como preterida. A nova versão tem o sufixo _s
("seguro").
Nesse contexto, "preterido" significa que o uso da função não é recomendado. Isso não significa que a função será removida do CRT.
As funções seguras não impedem nem corrigem erros de segurança. Em vez disso, elas detectam erros quando ocorrem. Eles fazem verificações extras para condições de erro. Se houver um erro, eles invocam um manipulador de erros (consulte Validação de parâmetro).
Por exemplo, a função não pode dizer se a strcpy
cadeia de caracteres que copia é muito grande para o buffer de destino. Sua contraparte segura, a strcpy_s
, usa o tamanho do buffer como parâmetro. Assim, ele pode determinar se ocorrerá uma saturação de buffer. Se você usar strcpy_s
para copiar 11 caracteres em um buffer de 10 caracteres, isso é um erro de sua parte, strcpy_s
não pode corrigir seu erro. Mas ela poderá detectar o erro e informá-lo invocando o manipulador de parâmetro inválido.
Eliminar avisos de depreciação
Há várias maneiras de eliminar os avisos de depreciação das funções mais antigas e menos seguras. O mais simples é simplesmente definir _CRT_SECURE_NO_WARNINGS
ou usar o warning
pragma. As duas opções desabilitarão os avisos de preterimento, mas as questões de segurança que dispararam os avisos ainda existirão. É melhor deixar os avisos de preterimento habilitados e tirar proveito dos novos recursos de segurança do CRT.
Em C++, a maneira mais fácil de eliminar os avisos de depreciação é usar sobrecargas de modelo Seguro. As sobrecargas eliminam avisos de depreciação em muitos casos. Eles substituem chamadas para funções preteridas por chamadas para versões seguras das funções. Por exemplo, considere esta chamada preterida para strcpy
:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
A definição de _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
como 1 elimina o aviso alterando a chamada de strcpy
para strcpy_s
, o que impede estouros de buffer. Para obter mais informações, consulte Sobrecargas de modelo seguras.
Para as funções preteridas sem sobrecargas de modelo seguro, considere definitivamente a atualização manual do código a fim de usar as versões seguras.
Outra fonte de avisos de depreciação, não relacionados à segurança, são as funções POSIX. Substitua os nomes de função POSIX por seus equivalentes padrão (por exemplo, altere para _access
) ou desabilite access
os avisos de depreciação relacionados ao POSIX definindo _CRT_NONSTDC_NO_WARNINGS
. Para obter mais informações, consulte Compatibilidade.
Mais recursos de segurança
Alguns dos recursos de segurança incluem:
Validação de parâmetro
Funções seguras, e muitas de suas equivalentes não seguras, validam parâmetros. A validação pode incluir:
- Verificação de
NULL
valores. - Verificar a validade dos valores enumerados.
- Verificar se os valores integrais estão em intervalos válidos.
Para obter mais informações, consulte Validação de parâmetro.
Um manipulador de parâmetros inválidos também é acessível ao desenvolvedor. Quando uma função encontra um parâmetro inválido, em vez de afirmar e sair do aplicativo, a CRT permite que você verifique esses problemas via
_set_invalid_parameter_handler
ou_set_thread_local_invalid_parameter_handler
.- Verificação de
Buffers de tamanho
Você deve passar o tamanho do buffer para qualquer função segura que grava em um buffer. As versões seguras validam se o buffer é grande o suficiente antes da gravação. A validação ajuda a evitar erros perigosos de saturação de buffer que podem permitir a execução de códigos mal-intencionados. Essas funções normalmente retornam um código de erro
errno
e invocam o manipulador de parâmetro inválido, se o tamanho do buffer for muito pequeno. Funções que leem de buffers de entrada, comogets
, têm versões seguras que exigem a especificação de um tamanho máximo.Rescisão nula
Algumas funções que deixavam cadeias de caracteres possivelmente não finalizadas têm versões seguras que garantem a terminação nula apropriada das cadeias de caracteres.
Relatório de erros aprimorado
As funções seguras retornam códigos de erro com mais informações sobre o erro do que as funções preexistentes. Agora, as funções seguras, e muitas das funções preexistentes, definem
errno
, e geralmente também retornam um tipo de códigoerrno
, para fornecer melhores relatórios de erro.Segurança do sistema de arquivos
APIs de E/S de arquivo seguro oferecem suporte o acesso ao arquivo seguro no caso padrão.
Segurança do Windows
APIs de processo seguro impõe políticas de segurança e permitem que as ACLs sejam especificadas.
Formatar verificação de sintaxe de cadeia de caracteres
Cadeias de caracteres inválidas são detectadas, por exemplo, quando você usa caracteres de campo de tipo incorretos em
printf
cadeias de caracteres de formato.
Confira também
Validação de parâmetros
Sobrecargas de modelo seguro
Arquivos .lib
de runtime do C (CRT) e Biblioteca Padrão (STL) do C++