Compartilhar via


Recursos de segurança no CRT

Muitas funções de CRT antigas tem versões mais recentes e mais seguras.Se uma função segura existe, a versão mais antiga e menos segura é sinalizada como desaprovado e a nova versão tem a _s o sufixo ("seguro").

Nesse contexto, apenas "obsoleto" significa que não é recomendável usar uma função; ele não indica que a função está programada para ser removido da CRT.

As funções de seguras não impedir ou corrigir erros de segurança. em vez disso, capturar erros quando eles ocorrerem.Eles executam verificações adicionais para condições de erro e, no caso de um erro, eles invocar um manipulador de erro (consulte Validação de parâmetro).

Por exemplo, o strcpy função possui uma maneira de dizer se ele está copiando a seqüência de caracteres é muito grande para o buffer de destino.No entanto, sua contraparte seguro, strcpy_s, leva o tamanho do buffer como um parâmetro, para que ele possa determinar se uma saturação de buffer ocorrerá.Se você usar strcpy_s para copiar onze caracteres em um buffer de dez caracteres, que é um erro de sua parte; strcpy_snão é possível corrigir o erro, mas ele pode detectar o erro e informá-lo chamando o manipulador de parâmetro inválido.

Eliminando os avisos de substituição

Há várias maneiras de eliminar os avisos de substituição para as funções mais antigos e menos seguros.A forma mais simples é simplesmente definir _CRT_SECURE_NO_WARNINGS ou use o Aviso pragma.Tanto desativará os avisos de substituição, mas é claro que ainda existem as questões de segurança que fez com que os avisos.Ele é muito melhor deixar a substituição avisos habilitado e tirar proveito dos novos recursos de segurança do CRT.

No C++, a maneira mais fácil de fazer isso é usar Proteger Overloads de modelo, que em muitos casos eliminará os avisos de substituição, substituindo as chamadas a funções preteridas com chamadas para as novas versões seguras dessas funções.Por exemplo, considere isso preterido chamada para strcpy:

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

Definindo _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES como 1 elimina o aviso alterando a strcpy de chamada para strcpy_s, que impede que estouros de buffer.Para obter mais informações, consulte Proteger Overloads de modelo.

Para essas funções preteridas sem sobrecargas de modelo seguro, você deve considerar definitivamente atualizar manualmente o seu código para usar as versões seguras.

Outra fonte de avisos de substituição, não relacionada à segurança, é as funções do POSIX.Substitua os nomes de função POSIX com seus equivalentes padrão (por exemplo, alterar acesso para _access), ou desativar avisos de substituição relacionados a POSIX, 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 funções CRT são validados em ambas as funções de seguras e em muitas versões preexistentes de funções.Essas validações incluem:

    • Verificação de NULL valores passados para as funções.

    • Verificando os valores enumerados de validade.

    • Verificando que integral valores estão em intervalos válidos.

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

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

  • Sized Buffers.As funções de seguras exigem que o tamanho do buffer passadas para qualquer função que grava em um buffer.As versões seguras validam o buffer é grande o suficiente antes de gravá-lo, ajudando a evitar erros de saturação de buffer perigosa que podem permitir a execução de códigos mal-intencionados.Essas funções geralmente retornam um errno tipo de código de erro e chamar o manipulador de parâmetro inválido se o tamanho do buffer é muito pequeno.Funções que são lidos a partir de buffers de entrada, como gets, têm versões seguras que exigem que você especificar um tamanho máximo.

  • Null termination.Algumas funções que seqüências de caracteres potencialmente não terminada esquerdas têm versões seguras que assegurar que as seqüências de caracteres são nulos terminado corretamente.

  • Enhanced error reporting.As funções de seguras retornam os códigos de erro com mais informações de erro do que estava disponível com as funções preexistentes.As funções de seguras e muitas das funções preexistentes agora definir errno e geralmente retornam um errno da mesma forma, o tipo de código para fornecer a melhor emissão de relatórios de erro.

  • Filesystem security.Acesso de segura de arquivos de suporte a APIs de e/S no caso padrão de arquivo seguro.

  • Windows security.APIs de processo seguro aplicar políticas de segurança e permitir que as ACLs seja especificado.

  • Format string syntax checking.Seqüências de caracteres inválidas forem detectadas, por exemplo, usando caracteres de campo do tipo incorreto na printf Formatar seqüências de caracteres.

Consulte também

Referência

Proteger Overloads de modelo

Recursos da biblioteca CRT

Conceitos

Validação de parâmetro