PHP開発では、通常、定数を使用して、グローバルな構成パラメーターまたはシステム情報を保存します。一部のシナリオでは、構成ファイルまたは外部メソッドを介して有効な定数を動的に制御できることを望んでいます。これを実現するために、PHPの組み込みget_defined_constants関数を使用して現在定義されているすべての定数を取得し、一定のホワイトリストを動的に構成して構成検証を実行して、プログラムで法的定数のみが使用されるようにします。
get_defined_constantsは、現在のスクリプト内のすべての定義された定数を取得し、一定の名前のキー値のペアと一定の値を配列として返すPHPの組み込み関数です。この関数のプロトタイプは次のとおりです。
array get_defined_constants (bool $categorize = false)
パラメーターカテゴリは、カテゴリごとに定数を返すかどうかを決定します。デフォルトでは、すべての定数を含む配列を返します。 Trueに設定されている場合、定数はカテゴリ(システム定数、拡張定数などなど)によって分類されます。
一定のホワイトリストの検証を実行するとき、最初に現在のスクリプト内のすべての定義された定数を取得する必要があります。 get_defined_constants()関数を呼び出すことにより、この情報を簡単に取得し、フィルタリングして確認できます。
$defined_constants = get_defined_constants(true);
print_r($defined_constants);
出力は、すべての定義された定数とその値を表示します。この時点で、私たちのニーズに応じて、システム定義の定数とカスタマイズされた定数を除外できます。
許可された定数のみが使用されるようにするために、「定数ホワイトリスト」を構築することにより、定数の使用を制限できます。一定のホワイトリストは、法的定数名を含む配列です。
$whitelist = ['MY_APP_DEBUG', 'MY_APP_ENV', 'MY_APP_VERSION'];
この配列には、許可される定数名が含まれています。次に、現在定義されている定数を反復し、ホワイトリストに載っているかどうかを確認できます。
動的検証を通じて、ホワイトリスト内の許可された定数のみがプログラムで使用されるようにすることができます。特定の実装方法は次のとおりです。
$defined_constants = get_defined_constants(true);
$whitelist = ['MY_APP_DEBUG', 'MY_APP_ENV', 'MY_APP_VERSION'];
foreach ($defined_constants['user'] as $constant => $value) {
if (!in_array($constant, $whitelist)) {
echo "警告: 絶え間ない '$constant' ホワイトリストでは定義されていません!\n";
} else {
echo "絶え間ない '$constant' 使用が許可されています,値はです: $value\n";
}
}
このコードでは、最初に現在のスクリプト( get_defined_constants(true) )ですべてのユーザー定義の定数を取得し、次にin_array関数を使用して、各定数がホワイトリストにあるかどうかを判断します。定数がホワイトリストにない場合、警告メッセージを出力します。
アプリケーションで使用する必要がある多くの定数を含む構成ファイルがあるとします。生産環境では、定義された定数のみを使用して、セキュリティリスクの可能性を回避できるようにしたいと考えています。
たとえば、アプリケーションでは、情報、環境設定などのデバッグなどの定数を定義する必要がある場合があります。
define('MY_APP_DEBUG', true);
define('MY_APP_ENV', 'production');
define('MY_APP_VERSION', '1.0.0');
次に、それらをホワイトリストの定数と比較して、これらの定数が合法であることを確認し、誤用または不適切な変更を避けます。
一部のシナリオでは、動的構成を介して特定の定数を有効または無効にすることが望ましい場合があります。たとえば、一部の定数は、開発モードでのみ有効になり、生産環境で無効にする場合があります。一定のホワイトリストメカニズムを通じて、特定の環境で使用できる定数を簡単に制御できます。
if (MY_APP_ENV === 'development') {
define('MY_APP_DEBUG', true);
} else {
define('MY_APP_DEBUG', false);
}
この時点で、環境に応じて定数ホワイトリストを動的に構築し、適切な定数のみが適切な環境で有効になることを確認して、対応する構成検証を実行できます。
PHPのget_defined_constants関数を使用すると、現在のスクリプトで定義されたすべての定数を簡単に取得し、ホワイトリストメカニズムを使用して動的検証を実行できます。一定のホワイトリストは、定義された定数のみを制限し、アプリケーションのセキュリティを改善し、不必要な構成エラーやセキュリティリスクを回避するのに役立ちます。
プログラムの安定性とセキュリティを確保するために、環境構成、動的制御、およびその他の手段と組み合わせて、構成検証のために定数ホワイトリストを柔軟に適用できます。