Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Muitas funções de CRT antigas têm versões mais recentes e mais seguras. Se houver uma função segura, a versão mais antiga e menos segura será marcada como obsoleta. A nova versão tem o _s sufixo ("seguro").
Nesse contexto, "obsoleto" 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 adicionais para condições de erro. Se houver um erro, eles invocarão um manipulador de erros (consulte Validação de parâmetro).
Por exemplo, a strcpy função não pode dizer se a cadeia de caracteres copiada é 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ê usa strcpy_s para copiar 11 caracteres em um buffer de 10 caracteres, isso é um erro de sua parte; strcpy_s não é possível 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 desativam os avisos de descontinuação, mas os problemas 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 substituição é usar Sobrecargas de modelo seguro. As sobrecargas eliminam avisos de descontinuação em muitos casos. Eles substituem chamadas para funções obsoletas 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 aquelas funções preteridas que não possuem sobrecargas de template seguras, é altamente recomendado que atualize manualmente seu código para 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 das funções POSIX por seus equivalentes padrão (por exemplo, alterar access para _access) ou desative 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:
- Verificar valores
NULL. - 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 declarar e sair do aplicativo, o CRT permite que você verifique esses problemas por meio de
_set_invalid_parameter_handlerou_set_thread_local_invalid_parameter_handler.- Verificar valores
Buffers dimensionados
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ódigo mal-intencionado. Essas funções normalmente retornam um código de erro
errnoe 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.As versões de depuração de algumas funções do CRT com segurança aprimorada preenchem o buffer passado para elas com um caractere especial (0xFE). Este caractere de preenchimento ajuda a encontrar casos em que o tamanho incorreto foi passado para a função. Infelizmente, isso também reduz o desempenho. Para melhorar o desempenho, use
_CrtSetDebugFillThresholdpara desabilitar o preenchimento de buffer. Para obter mais informações e uma lista de funções que têm esse comportamento, consulte_CrtSetDebugFillThreshold.Terminação nula
Algumas funções que deixaram cadeias de caracteres potencialmente não terminadas têm versões seguras, que garantem que as cadeias de caracteres sejam terminadas corretamente.
Relatório de erros aprimorado
As funções seguras retornam códigos de erro com mais informações de erro do que as disponíveis com as funções pré-existentes. As funções seguras e muitas das funções pré-existentes agora são definidas
errnoe geralmente retornam umerrnotipo de código também, para fornecer relatórios de erros melhores.Segurança do sistema de arquivos
APIs de E/S de arquivos seguras oferecem acesso seguro a arquivos por padrão.
Segurança do Windows
APIs de processo seguro impõe políticas de segurança e permitem que as ACLs sejam especificadas.
Verificação de sintaxe de cadeia de caracteres de formato
Por exemplo, cadeias de caracteres inválidas são detectadas quando você usa caracteres de campo de tipo incorretos em strings de formato
printf.
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++