Compartilhar via


Recursos de segurança no CRT

Muitas funções antigos do CRT têm versões mais recentes, mais seguros. Se uma função seguro existir, a versão anterior, menos segura será marcada como preterido e a nova versão tem o sufixo de _s proteger (“”).

Neste contexto, “substituiu” significa apenas que o uso de uma função não é recomendado; não indica que a função está agendada para ser removida de CRT.

As funções seguro não impedem nem e corrija erros de segurança; em vez disso, capturam erros quando ocorrem. Verifica condições adicionais de erro e, no caso de um erro, ele chama um manipulador de erros (consulte Validação do parâmetro).

Por exemplo, a função de strcpy não tem nenhuma maneira de definir se a cadeia de caracteres que está copiando é muito grande para seu buffer de destino. Porém, suas contrapartes seguros, strcpy_s, têm o tamanho do buffer como um parâmetro, o que pode determinar se uma excesso de buffer ocorrerá. Se você usar strcpy_s para copiar onze caracteres em um buffer de dez caractere, esse é um erro na parte; strcpy_s não pode corrigir o erro, mas pode detectar o erro e informá-lo invocando o manipulador inválido do parâmetro.

Eliminando avisos de substituição

Há várias maneiras de eliminar avisos de substituição para as funções mais antigos, a menos segura. O mais simples é simplesmente definir _CRT_SECURE_NO_WARNINGS ou usar o pragma de warning . O desabilitará avisos de substituição, mas naturalmente problemas de segurança que causaram os avisos ainda existam. É muito melhor deixar avisos de substituição habilitados e aproveitar os novos recursos de segurança de CRT.

Em C++, a maneira mais fácil de fazer isso é usar Sobrecargas de modelo segurasque, em muitos casos eliminarão avisos de substituição substituindo chamadas às funções substituídos por chamadas às novas versões seguro dessas funções. Por exemplo, considere este chamada substituído a strcpy:

   char szBuf[10]; 
   strcpy(szBuf, "test"); // warning: deprecated 

Definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES como 1 elimina o aviso alterar a chamada de strcpy a strcpy_s, o que impede que haja excesso de buffer. Para obter mais informações, consulte Sobrecargas de modelo seguras.

Para essas funções substituídos sem proteger sobrecargas do modelo, você deve considerar definida atualizar manualmente o seu código para usar as versões seguros.

Outra origem de avisos de substituição, não relacionadas à segurança, são funções de POSIX. Substituir nomes de função de POSIX com seus equivalentes padrão (por exemplo, alteração acesso a _access), ou desabilitar avisos POSIX- relacionados de substituição definindo _CRT_NONSTDC_NO_WARNINGS. Para obter mais informações, consulte Deprecated CRT Functions.

Recursos de segurança adicionais

Alguns dos recursos de segurança incluem o seguinte:

  • Parameter Validation. Os parâmetros passados para as funções de CRT são validados, em ambos protegem em muitas funções e versões preexistentes de funções. Essas validações incluem:

    • Verifique se há valores de NULL passada às funções.

    • Verificando valores enumerados para a validade.

    • Verifique se os valores integrais estão em intervalos válidos.

  • Para obter mais informações, consulte Validação do parâmetro.

  • Um manipulador para parâmetros inválidos também é acessível para o desenvolvedor. Quando uma imagem de um parâmetro inválido, em vez de declarar e saia do aplicativo, o CRT fornece uma maneira de verificar esses problemas com _set_invalid_parameter_handler função.

  • Sized Buffers. As funções de segurança exigem que o tamanho do buffer seja transmitido para qualquer função que grava a um buffer. As versões seguros que validam o buffer é grande o suficiente para gravar antes deles, ajudando a evitar o buffer perigoso leva os erros que podem permitir que o código mal-intencionado é executado. Essas funções geralmente retornam um tipo de errno do código de erro e invoca o manipulador inválido do parâmetro se o tamanho do buffer for muito pequeno. As funções que lê de buffers de entrada, como gets, têm as versões seguros que exigem que você especifique um tamanho máximo.

  • Null termination. Algumas funções que permitem cadeias de caracteres não têm potencial encerradas as versões seguros que garantem que as cadeias de caracteres nulas estejam corretamente terminadas.

  • Enhanced error reporting. Os códigos de erro das funções retornam mais seguros com informações de erro que estava disponível com as funções preexistir. As funções seguros e muitas das funções de errno preexistentes agora definido e geralmente retornam um tipo de código de errno além disso, para fornecer melhor relatório de erros.

  • Filesystem security. Acesso a arquivos seguro de suporte seguro de APIs de E/S de arquivo nos casos padrão.

  • Windows security. As APIs de segurança do processo impor políticas de segurança e permitem que as ACLs é especificado.

  • Format string syntax checking. As cadeias de caracteres inválidos são detectadas, por exemplo, usando caracteres incorretos de campo de tipo em cadeias de caracteres de formato printf .

Consulte também

Referência

Sobrecargas de modelo seguras

Recursos da biblioteca CRT

Conceitos

Validação do parâmetro