Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Muitas funções CRT antigas têm versões mais novas e seguras. Se existir uma função segura, a versão mais antiga e menos segura será marcada como obsoleta. A nova versão tem o sufixo _s ("secure").
Neste 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, eles detetam erros quando eles ocorrem. Eles fazem verificações adicionais para condições de erro. Se houver um erro, eles invocam um manipulador de erros (consulte Validação de parâmetros).
Por exemplo, a strcpy função não pode dizer se a cadeia de caracteres que copia é muito grande para o buffer de destino. Sua contraparte segura, strcpy_s, toma 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 ele pode detetar seu erro e informá-lo invocando o manipulador de parâmetros inválido.
Eliminando alertas de obsolescência
Há várias maneiras de eliminar avisos de descontinuação para as funções mais antigas e menos seguras. O mais simples é simplesmente definir _CRT_SECURE_NO_WARNINGS ou usar o warning pragma. Qualquer um deles desativa os avisos de descontinuação, mas os problemas de segurança que causaram os avisos ainda existem. É melhor deixar os avisos de preterição ativados e aproveitar os novos recursos de segurança CRT.
Em C++, a maneira mais fácil de eliminar os avisos de obsolescência é usar sobrecargas de template seguras. As sobrecargas eliminam avisos de obsolescência em muitos dos casos. Eles substituem chamadas para funções preteridas por chamadas para versões seguras das funções. Por exemplo, considere esta chamada obsoleta para strcpy:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES como 1 elimina o aviso ao alterar a chamada do strcpy para strcpy_s, o que evita transbordamentos de buffer. Para obter mais informações, consulte Sobrecargas de modelo seguro.
Para essas funções preteridas sem sobrecargas de modelo seguro, você deve definitivamente considerar atualizar manualmente seu código para usar as versões seguras.
Outra fonte de avisos de depreciação, não relacionada à segurança, são as funções POSIX. Substitua os nomes das funções POSIX por seus equivalentes padrão (por exemplo, altere 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 elementos de segurança
Alguns dos elementos de segurança incluem:
Validação de parâmetros
Funções seguras, e muitas de suas contrapartes não seguras, validam parâmetros. A validação pode incluir:
- Verificação de
NULLvalores. - Verificação de validade de valores enumerados.
- Verificar se os valores integrais estão em intervalos válidos.
Para obter mais informações, consulte Validação de parâmetros.
Um manipulador para 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, o CRT permite que você verifique esses problemas via
_set_invalid_parameter_handlerou_set_thread_local_invalid_parameter_handler.- Verificação de
Buffers com tamanho definido
Você deve passar o tamanho do buffer para qualquer função segura que grava em um buffer. As versões seguras validam que o buffer é grande o suficiente antes de gravar nele. 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 geralmente retornam um
errnocódigo de erro e invocam o manipulador de parâmetros inválido se o tamanho do buffer for muito pequeno. As funções que leem a partir de buffers de entrada, comogets, têm versões seguras que exigem que você especifique um tamanho máximo.As versões de depuração de algumas funções 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, também reduz o desempenho. Para melhorar o desempenho, use
_CrtSetDebugFillThresholdpara desativar o preenchimento do 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 em nulo.
Relatório de erros aprimorado
As funções seguras retornam códigos de erro com mais informações de erro do que estava disponível com as funções preexistentes. As funções seguras e muitas das funções preexistentes agora definem
errnoe muitas vezes retornam um tipo de códigoerrnopara fornecer uma melhor capacidade de relatório de erros.Segurança do sistema de arquivos
As APIs de E/S de arquivo seguro suportam acesso seguro a arquivos no caso padrão.
Segurança do Windows
As APIs de processo seguro impõem políticas de segurança e permitem que as ACLs sejam especificadas.
Verificação da sintaxe da cadeia de caracteres de formato
Cadeias de caracteres inválidas são detetadas, por exemplo, quando se usam caracteres de campo de tipo incorretos em
printfcadeias de formato.
Ver também
Validação de parâmetros
Sobrecargas de modelo seguro
Ficheiros de tempo de execução de C (CRT) e C++ Standard Library (STL) .lib