ホームページ >バックエンド開発 >PHPチュートリアル >PHP リモート インクルード ファイルの脆弱性分析ページ 1/6_PHP チュートリアル
ほとんどすべての CGI プログラムにはこのようなバグがありますが、具体的な症状は異なります。
1. 危険な関数が含まれています [include()、require() および include_once()、require_once()]
include() && require() ステートメント: 指定されたファイルをインクルードして実行します。
2 つの構造は、障害の処理方法を除いてまったく同じです。 include() は警告を生成し、require() は致命的なエラーを引き起こします。つまり、ファイルが見つからない場合にページの処理を停止したい場合は、require() を使用します。 include() の場合はそうではなく、スクリプトは引き続き実行されます。
「allow_url_fopen」が PHP でアクティブ化されている場合 (デフォルト設定)、ローカル ファイルの代わりに URL (HTTP またはその他のサポートされているカプセル化プロトコル経由) を使用して、含めるファイルを指定することもできます。ターゲット サーバーがターゲット ファイルを PHP コードとして解釈する場合は、HTTP GET の URL リクエスト文字列を使用して、インクルードされたファイルに変数を渡すことができます。
詳細なリファレンス: http://cn.php.net/manual/en/function.include.php
require_once() &&include_once()
require_once() および include_once() ステートメントは、スクリプト実行中に指定されたファイルをインクルードして実行します。この動作は require() ステートメントに似ていますが、唯一の違いは、ファイル内のコードが既にインクルードされている場合、再度インクルードされないことです。これは、スクリプトの実行中に同じファイルが複数回インクルードされる可能性があり、関数の再定義や変数の再割り当てなどの問題を回避するために、ファイルが 1 回だけインクルードされるようにする必要がある状況に適しています。
詳細なリファレンス: http://cn.php.net/manual/en/function.require-once.php
2. ファイルをインクルードする理由
プログラマーはプログラムを作成するときに、同じことをすることを好みません。私は同じコード (一部の一般的な関数など) を何度も書きたくないので、共有する必要があるコードを share.php などの別のファイルに書き、その呼び出しを他のファイルに含めます。 PHP では、この目的を達成するために上記の関数を使用します。 そのワークフロー: main.php に share.php を含める場合は、次のように include("share.php") を記述します。目的は達成されます。 share.php の関数を使用できます。含める必要があるファイル名をハードコーディングしても問題はありません。問題はどこにあるのでしょうか。
どのファイルを含める必要があるかわからない場合があります。たとえば、まず次のファイルindex.phpのコードを見てください:
[code]
if ($_GET)