界: Encapsulation
カプセル化とは、強い境界線を引くことです。Web ブラウザの場合は、自分のモバイル コードが他のモバイル コードに悪用されないようにすることを意味します。サーバー上では、検証されたデータと検証されていないデータ、あるユーザーのデータと別のユーザーのデータ、またはユーザーが見ることを許可されたデータと許可されていないデータの区別などを意味する場合があります。
Poor Logging Practice: Use of a System Output Stream
Abstract
専用のロギング機能ではなく
Console.Out
または Console.Error
を使用すると、プログラムの動作を監視することが困難になります。Explanation
例 1: 新人の開発者は次のような .NET プログラムを書きます。
たいていのプログラマは .NET の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
public class MyClass {
...
Console.WriteLine("hello world");
...
}
たいていのプログラマは .NET の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
Console.WriteLine()
を使って標準出力にメッセージを書いている場合が驚くほど多く見受けられます。問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
Console.WriteLine
が使用されている場合は、構造化ロギングシステムへの移行で何かが見落とされている可能性があります。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
専用のロギング機能ではなく
os.Stdout
または os.Stderr
を使用すると、プログラムの動作を監視することが困難になります。Explanation
例 1: 通常、新人の開発者は次のような Go プログラムを書きます。
たいていの開発者は Go の微妙なニュアンスを体得していきますが、
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギング レベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログ メッセージを正しい場所に送る機能があります。システム出力ストリームをロガーを適正に使用するコードと混同すると、結果として重要な情報のないログになることが多くあります。
構造化ロギングは、幅広く採用されていますが、多くの開発者が、自分の「実運用前」の開発でシステム出力ストリームを使用し続けている場合があります。開発初期段階を過ぎたコードをレビューしているときに
...
func foo(){
fmt.Println("Hello World")
}
たいていの開発者は Go の微妙なニュアンスを体得していきますが、
fmt.Println()
を使って標準出力にメッセージを出力することを止めない開発者もいます。問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギング レベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログ メッセージを正しい場所に送る機能があります。システム出力ストリームをロガーを適正に使用するコードと混同すると、結果として重要な情報のないログになることが多くあります。
構造化ロギングは、幅広く採用されていますが、多くの開発者が、自分の「実運用前」の開発でシステム出力ストリームを使用し続けている場合があります。開発初期段階を過ぎたコードをレビューしているときに
os.Stdout
または os.Stderr
へのロギングが使用されている場合は、構造化ロギング システムへの移行で何かが見落とされている可能性があります。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
専用のロギング機能ではなく
System.out
または System.err
を使用すると、プログラムの動作を監視することが困難になります。Explanation
例 1: 新人の開発者は次のような Java プログラムを書きます。
たいていのプログラマは Java の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
public class MyClass
...
System.out.println("hello world");
...
}
たいていのプログラマは Java の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
System.out.println()
を使って標準出力にメッセージを書いている場合が驚くほど多く見受けられます。問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
System.out
または System.err
が使用されている場合は、構造化ロギングシステムへの移行で何かが見落とされている可能性があります。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
専用のロギング機能ではなく
process.stdout
または process.stderr
を使用すると、プログラムの動作を監視することが困難になります。Explanation
例 1: 初期の Node.js 開発者が、stdin から読み取って stdout に書き込むのに作成する単純なプログラムは、次のようなものです。
ほとんどのプログラマは特に JavaScript と Node.js の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
process.stdin.on('readable', function(){
var s = process.stdin.read();
if (s != null){
process.stdout.write(s);
}
});
ほとんどのプログラマは特に JavaScript と Node.js の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
process.stdout.write()
を使って標準出力にメッセージを記述することから離れようとはしません。問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
process.stdout
または process.stderr
が使用されている場合は、構造化ロギングシステムへの移行で何かが見落とされている可能性があります。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
専用のロギング機能ではなく
print
または println
を使用すると、プログラムの動作を監視することが困難になります。Explanation
例 1: 新人の開発者は次のような Kotlin プログラムを書きます。
たいていのプログラマーは Kotlin の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混同すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに標準出力またはエラー ストリームが使用されている場合は、構造化ロギング システムへの移行で何かが見落とされている可能性があります。
class MyClass {
...
println("hello world")
...
}
}
たいていのプログラマーは Kotlin の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
print
または println
を使って標準出力にメッセージを書いている場合が驚くほど多く見受けられます。問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混同すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに標準出力またはエラー ストリームが使用されている場合は、構造化ロギング システムへの移行で何かが見落とされている可能性があります。
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
専用のロギング機能ではなく標準出力または標準エラーを使用すると、プログラムの動作を監視することが困難になります。
Explanation
例 1: 新人の開発者は次のような Python プログラムを書きます。
たいていのプログラマは Python の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、標準出力にメッセージを書いている場合が驚くほど多く見受けられます。
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
sys.stdout.write("hello world")
たいていのプログラマは Python の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、標準出力にメッセージを書いている場合が驚くほど多く見受けられます。
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
sys.stdout
または sys.stderr
が使用されている場合は、構造化ロギングシステムへの移行で何かが見落とされている可能性があります。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
専用のロギング機能ではなく
Kernel.puts
、Kernel.warn
、または Kernel.printf
を使用すると、プログラムの動作を監視することが困難になります。Explanation
例 1: 新人の開発者の多くは、次のような機能を含む Ruby プログラムを書きます。
たいていのプログラマは Ruby の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
これらの API を使用しないことが会社の方針である場合でも、ロギングシステムを使用し、情報をシステム出力ストリームに出力することでこれを回避できます。
例 2: 次のコードは
...
puts "hello world"
...
たいていのプログラマは Ruby の微妙なニュアンスを体得していきますが、最初に学んだことにとらわれ、
Kernel.puts
を使って標準出力にメッセージを書いている場合が驚くほど多く見受けられます。問題は、標準出力または標準エラーに直接書くことが、往々にしてロギングの非構造化形式として使用されることです。構造化ロギング機能は、ロギングレベル、統一フォーマット、ロガー識別子、タイムスタンプなどの機能だけでなく、ログメッセージを正しい場所に送るというおそらく最も重要な機能があります。システム出力ストリームをロガーを適正に使用するコードと混乱すると、結果として重要な情報のないログになることが多くあります。
開発者は構造化ロギングの必要性を広く認めていますが、「実運用前」の開発でシステム出力ストリームを使用し続けている場合が多くあります。開発初期段階を過ぎたコードをレビューしているときに
Kernel.puts
、Kernel.warn
、または Kernel.printf
が使用されている場合は、構造化ロギングシステムへの移行で何かが見落とされている可能性があります。これらの API を使用しないことが会社の方針である場合でも、ロギングシステムを使用し、情報をシステム出力ストリームに出力することでこれを回避できます。
例 2: 次のコードは
Logger
クラスを使用しますが、情報をシステム出力ストリームに記録します。
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