PHP の Register_globals の謎を解明する
かつて謎に包まれていた PHP 設定である Register_globals は、スクリプトの機能に大きな影響を与えます。この記事では、その内部の仕組みを明らかにし、関連する概念について説明します。
Register_globals とは何ですか?
register_globals ディレクティブは、$_REQUEST スーパーグローバル配列の内容をスクリプトのグローバルにシームレスに統合します。範囲。その結果、入力フィールドはスクリプト内で事前定義された変数として適切に表示されます。
たとえば、ユーザー名フィールドを含むフォーム送信では、スクリプトに $username 変数が与えられます。ただし、この便利さには代償が伴います。register_globals はセキュリティとコーディングの悪夢を招きます。
Register_globals の落とし穴の図解
次のコードを考えてみましょう:
if (user_is_admin($user)) { $authorized = true; } if ($authorized) { // Grant unbridled power! }
register_globals が有効になっていると、悪意のあるユーザーが URL を悪用する可能性があります脆弱性。スクリプトの URL に「?authorized=1」を追加するだけで不正アクセスが許可されます。
Register_globals と Global キーワードの区別
register_globals とは対照的に、global キーワードは動作します。はっきりと。これにより、他の場所で宣言された特定の変数にローカル スコープ内でアクセスできるようになります。
例:
$foo = 'bar'; baz(); function baz() { echo $foo; // Triggers an error: undefined variable } buzz(); function buzz() { global $foo; // Grants access to $foo within this scope echo $foo; // Outputs "bar" }
結論
register_globals により開発が促進されます。 、そのセキュリティへの影響は、認識されている利点を大幅に上回ります。堅牢で安全な PHP アプリケーションを確保するには、その機能を理解し、適切なコーディング方法を採用することが最も重要です。逆に、global キーワードは、指定されたスコープ内でグローバル変数を操作するための、対象を絞った制御されたアプローチを提供します。
以上がRegister_globals は PHP セキュリティにおいて敵ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。