Share via


Funções Banidas pelo SDL

Nos comentários de um post anterior eu me referi a Microsoft ter banido internamente o uso de uma série de funções em C/C++, consideradas "perigosas" por estarem ligadas a ocorrência de estouros de buffer. A maior parte destas funções tratam de manipulação de strings, e o risco existe porque em C/C++ as strings não tem tamanho determinado (elas terminam somente quando um NULL é encontrado).

A relação das funções banidas está em https://msdn2.microsoft.com/en-us/library/bb288454.aspx. Note que a chamadas funções "n" de manipulação de string (como strncpy) também são banidas, porque apesar dessas funções especificarem o número máximo de caracteres manipulados (o tal "n"), a função não coloca o terminador NULL ao final da string caso esse número máximo seja atingido, continuando assim a permitir estouros de buffer.

No lugar destas funções de manipulação de string banidas podem ser utilizadas tanto as funções da biblioteca strsafe.h como as da biblioteca Safe CRT. A Safe CRT está sendo padronizada como ISO 24731 e é provavelmente a melhor escolha para a portabilidade do seu código.

O banimento de funções perigosas e substituição por versões mais seguras veio do OpenBSD, que baniu o uso de str(n)cpy e str(n)cat e as substituiu por strlcpy e strlcat. Infelizmente esta prática (como tantas outras de desenvolvimento seguro) não foi adotada por outros sistemas, e o resultado aparece.

Comments

  • Anonymous
    January 01, 2003
    PingBack from http://blogs.technet.com/fcima/archive/2007/06/25/comparando-seguran-a-entre-sistemas-operacionais.aspx

  • Anonymous
    January 01, 2003
    Boa pergunta Wagner, e eu não sei a resposta. O termo que padronizamos realmente foi buffer overrun mais ainda asssim muita documentação nossa usa buffer overflow.

  • Anonymous
    June 28, 2007
    Cima, uma curiosidade, por que a microsoft usa em suas definições o termo buffer overrun e não buffer overflow? Já muita confusão com o termo, algum motivo especial? Abs. Wagner Elias