Skip to content

01.1 Escopo

Cleilson edited this page Oct 30, 2021 · 1 revision

ESCOPO

O PADRÃO DE Codificação Segura CERT C foi desenvolvido especificamente para versões da linguagem de programação C definidas por

  • ISO/IEC 9899:2011 ISO/IEC, Linguagens de Programação — C, 3ª ed. [ISO/IEC 9899:2011]
  • ISO/IEC 9899:2011/Cor.1:2012, Corrigendum Técnico 1

Embora as diretrizes para este padrão tenham sido desenvolvidas para C11, elas também podem ser aplicadas a versões anteriores da linguagem de programação C, incluindo C99. Variações entre versões do Padrão C que afetariam a aplicação adequada dessas diretrizes são notadas quando aplicável.

A maioria das diretrizes tem um exemplo de código não conforme que é um programa de conformidade C11 para garantir que o problema identificado pela diretriz esteja dentro do escopo da norma. No entanto, as melhores soluções para proteger problemas de codificação são muitas vezes específicas da plataforma. Em muitos casos, este padrão fornece soluções adequadas em conformidade para sistemas operacionais POSIX e Windows. As extensões de linguagem e biblioteca que foram publicadas como relatórios técnicos ISO/IEC ou especificações técnicas são frequentemente priorizadas, como as descritas pela ISO/IEC TR 24731-2, Extensões para a Biblioteca C — Parte II: Funções de Alocação Dinâmica [ ISO/IEC TR 24731-2:2010 ]. Em muitos casos, soluções compatíveis também são fornecidas para plataformas específicas, como Linux ou OpenBSD. Ocasionalmente, são descritos comportamentos interessantes ou ilustrativos específicos da implementação.

Lógica Um padrão de codificação para a linguagem de programação C pode criar o maior valor para o período mais longo de tempo, focando no Padrão C (C11) e nos relatórios técnicos pós-C11 relevantes.

A Norma C documenta a prática existente sempre que possível. Ou seja, a maioria dos recursos deve ser testada em uma implementação antes de ser incluída no padrão. O Padrão de Codificação CERT C tem um propósito diferente: estabelecer um conjunto de práticas recomendadas, que às vezes requer a introdução de novas práticas que podem não ser amplamente conhecidas ou usadas quando as práticas existentes são inadequadas. Para dizer de uma maneira diferente, o PADRÃO de Codificação CERT C tenta conduzir a mudança em vez de apenas documentá-la.

Por exemplo, o anexo K opcional, mas normativo, "Bounds-Checking Interfaces", introduzido no C11, está ganhando suporte, mas atualmente é implementado por apenas alguns fornecedores. Ele introduz funções como , que servem ao propósito de segurança adicionando o tamanho do buffer de destino à API. Um documento futuro não poderia ignorar razoavelmente essas funções simplesmente porque elas ainda não foram amplamente implementadas. A base C Standard é mais amplamente implementada do que o Anexo K, mas mesmo que não fosse, é a direção em que a indústria está se movendo. Os desenvolvedores do novo código C, especialmente, precisam de orientação que seja utilizável, on e faz o melhor uso, os compiladores e ferramentas que agora estão sendo desenvolvidos e estão sendo suportados no futuro.memcpy_s()

Alguns fornecedores têm extensões para C, e alguns também implementaram apenas parte do Padrão C antes de parar o desenvolvimento. Consequentemente, não é possível fazer backup e discutir apenas C95, C90 ou C99. A equação de suporte ao fornecedor é muito complicada para desenhar uma linha e dizer que um determinado compilador suporta exatamente um certo padrão. Qualquer que seja o ponto de demarcação selecionado, diferentes fornecedores estão em lados opostos dele para diferentes partes do idioma. Suportar todas as possibilidades exigiria testar o cross-product de cada compilador com cada recurso de idioma. Consequentemente, selecionamos um ponto de demarcação que é o mais recente no tempo para que as regras e recomendações definidas pela norma sejam aplicáveis pelo maior tempo possível. Como resultado das variações de suporte, a portabilidade do código-fonte é aprimorada quando o programador usa apenas os recursos especificados pelo C99. Esta é uma das muitas trocas entre segurança e portabilidade inerentes à programação da linguagem C.

O valor das informações prospectivas aumenta com o tempo antes de começar a diminuir. O valor das informações de aparência retrógrada começa a diminuir imediatamente.

Por todas essas razões, a prioridade desta norma é apoiar o desenvolvimento de novos códigos utilizando C11 e os relatórios técnicos pós-C11 que não foram incorporados à Norma C. Uma prioridade em segundo lugar é apoiar a remediação do código antigo usando c99 e os relatórios técnicos.

Este padrão de codificação faz contribuições para apoiar compiladores mais antigos quando essas contribuições podem ser significativas e fazê-lo não compromete outras prioridades. A intenção não é capturar todos os desvios do padrão, mas capturar apenas alguns importantes.

Problemas não abordados Uma série de problemas não são abordados por este padrão de codificação seguro.

Estilo de codificação Questões de estilo de codificação são subjetivas, e tem se mostrado impossível desenvolver um consenso sobre diretrizes de estilo apropriadas. Consequentemente, o Padrão de Codificação Segura CERT C não requer a aplicação de qualquer estilo de codificação específico, mas apenas sugere que as organizações de desenvolvimento definam ou adotem diretrizes de estilo e apliquem essas diretrizes de forma consistente. A maneira mais fácil de aplicar um estilo de codificação de forma consistente é usar uma ferramenta de formatação de código. Muitos ambientes de desenvolvimento interativo (IDEs) fornecem tais recursos.

Regras controversas Em geral, as normas de codificação CERT tentam evitar a inclusão de regras controversas que carecem de um amplo consenso.

Clone this wiki locally