Share via


Aprimoramentos de segurança no CRT

Foram feitos aprimoramentos significativos para tornar mais segura a CRT.Muitas funções de CRT agora têm versões mais seguras.Se existir uma nova função de segurança, a versão mais antiga e menos segura está marcada sistema autônomo preterido e a nova versão tem o _ssufixo ("seguro").

Observe que nesse contexto, "obsoleto" apenas significa que não é recomendável o uso da função; ele não indica que a função está agendada para ser removido do CRT.

Também observe as funções de seguras não impedir ou corrigir erros de segurança; em vez disso, eles capturar erros quando eles ocorrerem.Eles realizam verificações adicionais para condições de erro e no caso de erro, eles chamar uma rotina de tratamento de erros (consulte Validação de parâmetro).

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

Eliminação de avisos de substituição

Há várias maneiras de eliminar os avisos de substituição para as funções mais antigas e menos seguros.O mais simples é simplesmente definir _CRT_SECURE_NO_WARNINGS ou use o aviso pragma. Tanto desabilitará os avisos de substituição, mas claro ainda existem as questões de segurança que fez com que os avisos.É muito melhor deixar substituição avisos habilitado e usufruir os 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á avisos de substituição, substituindo chamadas a funções preterido com chamadas para as novas versões seguras dessas funções. Por exemplo, considere que isso preterido telefonar strcpy:

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

Definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES sistema autônomo 1 elimina o aviso alterando o strcpy telefonar para strcpy_s, que impede que estouros de buffer. Para obter mais informações, consulte Proteger overloads de modelo.

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

Outra fonte de avisos de substituição, não relacionadas à segurança, é funções POSIX.Substituir nomes de função POSIX por seus equivalentes padrão (por exemplo, alterar de acesso to _access), ou desabilitar avisos relacionados a POSIX substituição definindo _CRT_NONSTDC_NO_WARNINGS. Para obter mais informações, consulte Funções de CRT preterido.

Aprimoramentos de segurança

Alguns dos aprimoramentos de segurança incluem:

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

    • Verificando NULL valores passados para as funções.

    • Verificando os valores enumerados para fins de validade.

    • Verificando se integral valores estão em intervalos válido.

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

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

  • Sized Buffers.As funções de seguras exigem que o dimensionar do buffer ser passadas para qualquer função que grava em um buffer.Versões seguras confirmam que o buffer é grande o suficiente antes de gravá-lo, ajudando a evitar erros de saturação de buffer perigosos que poderiam permitir executar de códigos mal-intencionados.Essas funções retornam normalmente um errno tipo de código de erro e chamar o manipulador de parâmetro inválido se o dimensionar do buffer for muito pequeno. Funções que ler de buffers de entrada, sistema autônomo gets, tem versões seguras que exigem que você especificar um dimensionar máximo.

  • Null termination.Algumas funções esquerdas potencialmente não terminados em seqüências têm versões seguras que garantir que as seqüências de caracteres corretamente nula finalizada.

  • Enhanced error reporting.As funções seguras retornam os códigos de erro com mais informações de erro que estava disponível com as funções preexistentes.sistema autônomo funções de seguras e muitas das funções preexistentes agora conjunto errno e com freqüência retornar uma errno tipo de código, para fornecer melhor o relatório de erros.

  • Filesystem security.Acesso a arquivos seguro suporte a APIs de E/s no caso padrão de arquivo seguro.

  • Windows security.Processo seguro APIs reforçar as políticas de segurança e permitem que ACLs seja especificado.

  • Format string syntax checking.Seqüências de caracteres inválidas agora são detectadas, por exemplo, usando caracteres de campo do tipo incorreto no printf cadeias de caracteres de formato.

A documentação para cada função descreve aprimoramentos de segurança adicionais.

Para obter mais informações, consulte os seguintes artigos no MSDN online:

Consulte também

Conceitos

Validação de parâmetro

Funções de CRT preterido

Referência

Versões segurança avançado de funções de CRT

Proteger overloads de modelo

C em time de execução bibliotecas