Reino: Encapsulation

La encapsulación consiste en crear límites fuertes. En un explorador web esto puede suponer la seguridad de que tu codificación móvil no se vea comprometido por otro código móvil. En el servidor puede significar la diferenciación entre los datos validados y los que no lo están, entre los datos de un usuario y los de otro, o entre los diferentes usuarios, los datos que pueden ver y los que no.

Poor Logging Practice: Use of a System Output Stream

Abstract
Si se utilizan Console.Out o Console.Error en lugar de una interfaz de registro dedicada, es difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: el primer programa .NET que un desarrollador aprende a escribir es el siguiente:


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


Mientras que la mayoría de los programadores continúan con el aprendizaje de matices y detalles de .NET, un número sorprendente se queda en esta primera lección y no deja de escribir mensajes a salida estándar utilizando Console.WriteLine().

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, un identificador de registros, marcas de tiempo y, puede que de forma más crítica, la capacidad para dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registros de forma adecuada, a menudo el resultado es un registro en buen estado al que le falta información esencial.

Los desarrolladores aceptan ampliamente la necesidad de los registros estructurados, aunque muchos siguen utilizando los flujos de salida del sistema en el desarrollo de "pre-producción". Si el código que está revisando ya ha pasado las primeras fases del desarrollo, el uso de Console.WriteLine podría indicar un descuido en el paso a un sistema de registro estructurado.
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
Si se utilizan os.Stdout o os.Stderr en lugar de una interfaz de registro dedicada, es difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: Generalmente, el primer programa Go que un desarrollador aprende a escribir es el siguiente:


...

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


Si bien muchos desarrolladores continúan aprendiendo los matices y las sutilezas de Go, algunos nunca dejan de escribir mensajes para salida estándar mediante fmt.Println().

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, identificador de registrador, marcas de tiempo y la capacidad de dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registradores de forma adecuada, el resultado normalmente es un registro en buen estado al que le falta información esencial.

El registro estructurado es ampliamente aceptado, pero muchos desarrolladores siguen usando los flujos de salida del sistema en su desarrollo "previo a la producción". Si el código que está revisando ha superado las fases iniciales de desarrollo, el registro en os.Stdout o os.Stderr puede indicar un descuido en el paso a un sistema estructurado de registro.
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
Si se utilizan System.out o System.err en lugar de una interfaz de registro dedicada, es difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: El primer programa Java que un desarrollador aprende a escribir tiene el siguiente aspecto:


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


Aunque muchos programadores continúan aprendiendo los matices y sutilezas de Java, una cantidad sorprendente de ellos se quedan en esta primera lección y nunca dejan de escribir mensajes para salida estándar usando System.out.println().

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, un identificador de registros, marcas de tiempo y, puede que de forma más crítica, la capacidad para dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registros de forma adecuada, a menudo el resultado es un registro en buen estado al que le falta información esencial.

Los desarrolladores aceptan ampliamente la necesidad de los registros estructurados, aunque muchos siguen utilizando los flujos de salida del sistema en el desarrollo de "pre-producción". Si el código que está revisando está más allá de las fases iniciales de desarrollo, el uso de System.out o System.err podría indicar un descuido en el paso a un sistema estructurado de registro.
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
Si se utiliza process.stdout o process.stderr en lugar de una interfaz de registro dedicada, resulta más difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: Un programa simple que un desarrollador temprano de Node.js puede escribir para leer desde stdin y volver a escribirlo en stdout nuevamente puede tener el siguiente aspecto:


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


Aunque la mayoría de los programadores continúan aprendiendo los matices y las sutilezas de JavaScript y Node.js, muchos de ellos se quedan en esta primera lección y nunca dejan de escribir mensajes para salida estándar utilizando process.stdout.write().

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, un identificador de registros, marcas de tiempo y, puede que de forma más crítica, la capacidad para dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registros de forma adecuada, a menudo el resultado es un registro en buen estado al que le falta información esencial.

Los desarrolladores aceptan ampliamente la necesidad de los registros estructurados, aunque muchos siguen utilizando los flujos de salida del sistema en el desarrollo de "pre-producción". Si el código que está revisando está más allá de las fases iniciales de desarrollo, el uso de process.stdout o process.stderr podría indicar un descuido en el paso a un sistema estructurado de registro.
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
Si se utilizan print o println en lugar de una interfaz de registro dedicada, es difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: el primer programa Kotlin que un desarrollador aprende a escribir es el siguiente:


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


Aunque la mayoría de los programadores continúan aprendiendo los matices y las sutilezas de Kotlin, una cantidad sorprendente de ellos se quedan en esta primera lección y nunca dejan de escribir mensajes para salida estándar usando print o println.

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, un identificador de registros, marcas de tiempo y, puede que de forma más crítica, la capacidad para dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registros de forma adecuada, a menudo el resultado es un registro en buen estado al que le falta información esencial.

Los desarrolladores aceptan ampliamente la necesidad de los registros estructurados, aunque muchos siguen utilizando los flujos de salida del sistema en el desarrollo de "pre-producción". Si el código que está revisando está más allá de las fases iniciales de desarrollo, el uso de la secuencia de error o salida estándar podría indicar un descuido en el paso a un sistema estructurado de registro.
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
Si se utiliza salida estándar o error estándar, en lugar de una interfaz de registro dedicada, resulta más difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: El primer programa Python que un desarrollador aprende a escribir normalmente tiene el siguiente aspecto:


sys.stdout.write("hola, mundo")


Aunque muchos programadores continúan aprendiendo los matices y sutilezas de Python, una cantidad sorprendente de ellos se quedan en esta primera lección y nunca dejan de escribir mensajes para salida estándar.

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, un identificador de registros, marcas de tiempo y, puede que de forma más crítica, la capacidad para dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registros de forma adecuada, a menudo el resultado es un registro en buen estado al que le falta información esencial.

Los desarrolladores aceptan ampliamente la necesidad de los registros estructurados, aunque muchos siguen utilizando los flujos de salida del sistema en el desarrollo de "pre-producción". Si el código que está revisando está más allá de las fases iniciales de desarrollo, el uso de sys.stdout o sys.stderr podría indicar un descuido en el paso a un sistema estructurado de registro.
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
Si se utiliza Kernel.puts,Kernel.warn o Kernel.printf en lugar de una interfaz de registro dedicada, resulta más difícil supervisar el comportamiento del programa.
Explanation
Ejemplo 1: el primer programa de Ruby que aprende a escribir un desarrollador a menudo incluye una función como:


...
puts "hello world"
...


Aunque muchos programadores continúan aprendiendo los matices y sutilezas de Ruby, una cantidad sorprendente de ellos se quedan en esta primera lección y nunca dejan de escribir mensajes para salida estándar usando Kernel.puts.

El problema es que escribir directamente a salida estándar o error estándar a menudo se utiliza como una forma no estructurada de registro. Las interfaces de registro estructuradas proporcionan características como niveles de registro, formateo uniforme, un identificador de registros, marcas de tiempo y, puede que de forma más crítica, la capacidad para dirigir mensajes de registro al sitio adecuado. Cuando el uso de los flujos de salida del sistema se confunde con el código que utiliza los registros de forma adecuada, a menudo el resultado es un registro en buen estado al que le falta información esencial.

Los desarrolladores aceptan ampliamente la necesidad de los registros estructurados, aunque muchos siguen utilizando los flujos de salida del sistema en el desarrollo de "pre-producción". Si el código que está revisando está más allá de las fases iniciales de desarrollo, el uso de Kernel.puts,Kernel.warn o Kernel.printf podría indicar un descuido en el paso a un sistema estructurado de registro.
Si hay una directiva de la empresa que no permite el uso de estas API, esto aún se podría solucionar mediante el uso de un sistema de registro para, a continuación, imprimir la información en un flujo de salida del sistema.

Ejemplo 2: El siguiente código utiliza la clase Logger, pero registra información en un flujo de salida del 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