Reino: Encapsulation

Encapsulamento consiste em traçar limites fortes. Em um navegador web, isso pode significar que seu código para dispositivos móveis não pode ser abusado por outros códigos para dispositivos móveis. No servidor, pode significar a diferenciação entre dados validados e não validados, entre os dados de dois usuários ou entre os dados que os usuários podem ou não acessar.

Poor Logging Practice: Use of a System Output Stream

Abstract
O uso de Console.Out ou Console.Error no lugar de um recurso dedicado de registro em log dificulta o monitoramento do comportamento do programa.
Explanation
Exemplo 1: O primeiro programa .NET que um programador aprende a escrever geralmente é o seguinte:


public class MyClass {
...
Console.WriteLine("hello world");
...
}


Embora a maioria dos programadores siga em frente e aprenda muitas nuances e sutilezas sobre o .NET, um número surpreendente permanece nessa primeira lição e nunca desiste de escrever mensagens para a saída padrão utilizando Console.WriteLine().

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora, e, talvez de maneira mais crítica, a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com o código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido ao qual faltam informações críticas.

Os desenvolvedores aceitam amplamente a necessidade por um registro em log estruturado, mas muitos continuam a usar fluxos de saída do sistema no desenvolvimento "pré-produção". Se o código que você está analisando já tiver passado das fases iniciais de desenvolvimento, o uso de Console.WriteLine pode indicar um descuido na mudança para um sistema de registro em log estruturado.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.structural.dotnet.poor_logging_practice_use_of_a_system_output_stream
Abstract
O uso de os.Stdout ou os.Stderr no lugar de um recurso dedicado de registro em log dificulta o monitoramento do comportamento do programa.
Explanation
Exemplo 1: Normalmente, O primeiro programa Go que um desenvolvedor aprende a escrever é o seguinte:


...

func foo(){
fmt.Println("Hello World")
}


Embora a maioria dos desenvolvedores siga em frente e aprenda muitas nuances e sutilezas sobre o Go, alguns nunca desistem de escrever mensagens para a saída padrão utilizando fmt.Println().

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora e a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido, mas ao qual faltam informações críticas.

O registro em log estruturado é amplamente aceito, mas muitos desenvolvedores continuam a usar fluxos de saída do sistema em seu desenvolvimento de “pré-produção”. Se o código que você está analisando já passou das fases iniciais de desenvolvimento, o registro em log no os.Stdout ou os.Stderr pode indicar um descuido na mudança para um sistema de registro em log estruturado.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.semantic.golang.poor_logging_practice_use_of_a_system_output_stream
Abstract
O uso de System.out ou System.err no lugar de um recurso dedicado de registro em log dificulta o monitoramento do comportamento do programa.
Explanation
Exemplo 1: O primeiro programa Java que um desenvolvedor aprende a escrever é o seguinte:


public class MyClass
...
System.out.println("hello world");
...
}


Embora a maioria dos programadores siga em frente e aprenda muitas nuances e sutilezas sobre o Java, um número surpreendente permanece nessa primeira lição e nunca desiste de escrever mensagens para a saída padrão utilizando System.out.println().

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora, e, talvez de maneira mais crítica, a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com o código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido ao qual faltam informações críticas.

Os desenvolvedores aceitam amplamente a necessidade por um registro em log estruturado, mas muitos continuam a usar fluxos de saída do sistema no desenvolvimento "pré-produção". Se o código que você está analisando já passou das fases iniciais de desenvolvimento, o uso de System.out ou System.err pode indicar um descuido na mudança para um sistema de registro em log estruturado.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.structural.java.poor_logging_practice_use_of_a_system_output_stream
Abstract
O uso de process.stdout ou process.stderr no lugar de um recurso dedicado de registro em log dificulta o monitoramento do comportamento do programa.
Explanation
Exemplo 1: Um programa simples que um desenvolvedor de Node.js inicial pode escrever para ler de stdin e gravá-lo novamente em stdout pode ter a seguinte aparência:


process.stdin.on('readable', function(){
var s = process.stdin.read();
if (s != null){
process.stdout.write(s);
}
});


Embora a maioria dos programadores siga em frente e aprenda muitas nuances e sutilezas sobre o JavaScript e o Node.js em especial, muitos permanecem nessa primeira lição e nunca desiste de escrever mensagens para a saída padrão utilizando process.stdout.write().

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora, e, talvez de maneira mais crítica, a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com o código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido ao qual faltam informações críticas.

Os desenvolvedores aceitam amplamente a necessidade por um registro em log estruturado, mas muitos continuam a usar fluxos de saída do sistema no desenvolvimento "pré-produção". Se o código que você está analisando já passou das fases iniciais de desenvolvimento, o uso de process.stdout ou process.stderr pode indicar um descuido na mudança para um sistema de registro em log estruturado.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.structural.javascript.poor_logging_practice_use_of_a_system_output_stream
Abstract
O uso de print ou println no lugar de um recurso dedicado de registro em log dificulta o monitoramento do comportamento do programa.
Explanation
Exemplo 1: O primeiro programa Kotlin que um programador aprende a escrever geralmente é o seguinte:


class MyClass {
...
println("hello world")
...
}
}


Enquanto a maioria dos programadores vai em frente e aprende muitas nuances e sutilezas sobre o Kotlin, um número surpreendente permanece nessa primeira lição e nunca desiste de escrever mensagens para a saída padrão utilizando print ou println.

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora, e, talvez de maneira mais crítica, a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com o código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido ao qual faltam informações críticas.

Os desenvolvedores aceitam amplamente a necessidade por um registro em log estruturado, mas muitos continuam a usar fluxos de saída do sistema no desenvolvimento "pré-produção". Se o código que você está analisando passou das fases iniciais de desenvolvimento, o uso da saída padrão ou do fluxo de erros pode indicar um descuido na mudança para um sistema de registro em log estruturado.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.structural.kotlin.poor_logging_practice_use_of_a_system_output_stream
Abstract
Usar a saída padrão ou erro padrão em vez de um recurso de registro dedicado torna difícil monitorar o comportamento do programa.
Explanation
Exemplo 1: O primeiro programa em Python que um desenvolvedor aprende a escrever costuma ser o seguinte:


sys.stdout.write("hello world")


Embora a maioria dos programadores aprenda posteriormente muitas das nuances e sutilezas do Python, um número surpreendente deles permanece nessa primeira lição e continua a escrever mensagens na saída padrão.

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora, e, talvez de maneira mais crítica, a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com o código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido ao qual faltam informações críticas.

Os desenvolvedores aceitam amplamente a necessidade por um registro em log estruturado, mas muitos continuam a usar fluxos de saída do sistema no desenvolvimento "pré-produção". Se o código que você está analisando já passou das fases iniciais de desenvolvimento, o uso de sys.stdout ou sys.stderr pode indicar um descuido na mudança para um sistema de registro em log estruturado.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.structural.python.poor_logging_practice_use_of_a_system_output_stream
Abstract
Usar Kernel.puts, Kernel.warn ou Kernel.printf em vez de um recurso de registro em log dedicado torna difícil monitorar o comportamento do programa.
Explanation
Exemplo 1: O primeiro programa Ruby que um desenvolvedor aprende a escrever, muitas vezes, inclui funcionalidades como:


...
puts "hello world"
...


Embora a maioria dos programadores siga em frente e aprenda muitas nuances e sutilezas sobre o Ruby, um número surpreendente permanece nessa primeira lição e nunca desiste de escrever mensagens para a saída padrão utilizando Kernel.puts.

O problema é que escrever diretamente para a saída padrão ou erro padrão é frequentemente utilizado como uma forma não estruturada de registro. As instalações estruturadas de registro em log fornecem recursos como níveis de registro em log, formatação uniforme, um identificador de agente, carimbos de data/hora, e, talvez de maneira mais crítica, a capacidade de direcionar as mensagens de log ao lugar certo. Quando o uso de fluxos de saída do sistema é misturado com o código que utiliza agentes corretamente, o resultado é muitas vezes um log bem mantido ao qual faltam informações críticas.

Os desenvolvedores aceitam amplamente a necessidade por um registro em log estruturado, mas muitos continuam a usar fluxos de saída do sistema no desenvolvimento "pré-produção". Se o código que você está analisando já tiver passado das fases iniciais de desenvolvimento, o uso de Kernel.puts,Kernel.warn or Kernel.printf pode indicar um descuido na alteração para um sistema de registro em log estruturado.
Se houver uma política da empresa de não usar essas APIs, isso ainda poderia ser contornado por meio da utilização de um sistema de registro em log para imprimir as informações em um fluxo de saída do sistema.

Exemplo 2: Este código usa a classe Logger, mas registra informações em um fluxo de saída do sistema:


require 'logger'
...
logger = Logger.new($stdout)
logger.info("hello world")
...
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-11 Error Handling
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4, Requirement 10.3.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4, Requirement 10.3.1
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 3.6 - Sensitive Data Retention
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 3.6 - Sensitive Data Retention
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
desc.structural.ruby.poor_logging_practice_use_of_a_system_output_stream