ホームページ  >  記事  >  バックエンド開発  >  PHPの脆弱性完全解決(9) - ファイルアップロードの脆弱性

PHPの脆弱性完全解決(9) - ファイルアップロードの脆弱性

黄舟
黄舟オリジナル
2016-12-22 09:47:541780ブラウズ

転載する場合は出典を示してください: PHP 脆弱性完全解決策 (9) - ファイル アップロードの脆弱性

Web アプリケーションのセットは通常、訪問者がいくつかのファイルをアップロードしやすくするためにファイル アップロード機能を提供します。

以下は簡単なファイルアップロードフォームです



form>

php設定ファイルphp.ini、オプションupload_max_filesizeはアップロードできるファイルサイズを指定します、デフォルトは2M

$_FILES配列変数です


PHPは変数$_FILESを使用してファイルをアップロードします、 $_FILES は配列です。 test.txt をアップロードすると、$_FILES 配列の内容は次のようになります。

$FILES

Array

{

[file] => Array

{

[name] =>名前
[タイプ] => text/plain //MIME タイプ
[tmp_name] => /tmp/php5D.tmp //一時ファイル
[エラー] => 0 //エラーメッセージ
; 536 //ファイルサイズ (バイト単位)
}
}
ファイルアップロードボタンの name 属性値が file

の場合、$_FILES を使用します。 [' file']['name'] は、クライアントによってアップロードされたファイルのパスを除いた名前を取得します。 $_FILES['file']['tmp_name'] を使用して、サーバーがアップロードされたファイルを保存する一時ファイルのパスを取得します

アップロードされたファイルが保存されるフォルダー

PHP は、アップロードされたファイルをルート ディレクトリに直接配置しません一時ファイルとして保存する場合、名前は $_FILES['file']['tmp_name'] の値になります。開発者は、この一時ファイルを保存されている Web サイトのフォルダーにコピーする必要があります。

$_FILES['file']['tmp_name'] の値は PHP によって設定され、開発者は $_FILES['file']['name'] を使用してファイルを取得する必要があります。アップロードされたファイルの元の名前の値。

ファイルアップロード時のエラー情報

$_FILES['file']['error']変数は、ファイルアップロード時のエラー情報を保存するために使用されます:

エラー情報

Value

説明

UPLOAD_ERR_OK0エラーなしUPLOAD_ERR_INI_SIZE1アップロードされたファイルのサイズがphp.iniの設定を超えていますUPLO AD_ERR_FROM_SIZE2アップロードファイルのサイズHTML の MAX_FILE_SIZE の値を超えていますUPLOAD_ERR_PARTIAL3ファイルの一部のみをアップロードしますUPLOAD_ERR_NO_FILE4ファイルはアップロードされません

ファイルアップロードの脆弱性

Web サイト訪問者に画像をアップロードする機能を提供する場合、訪問者がアップロードするのは実際には画像ではなく、指定可能な PHP プログラムである可能性があることに注意する必要があります。画像が保存されているディレクトリが開いているフォルダーである場合、侵入者はアップロードされた PHP ファイルをリモートで実行して攻撃を実行することができます。

以下は簡単なファイルアップロードの例です:




php
// アップロードされたファイルのディレクトリを設定します
$uploaddir = "D:/www/images/"
// ファイルが存在するかどうかを確認します
if (isset ($_FILES['file1']))
{
// ファイル名を含む、Web サイトのディレクトリに配置されるフルパス
$uploadfile = $uploaddir . $_FILES['file1']['name' ];
// サーバーに保存されているパスを実際のファイル名に移動します
move_FILES['file1']['tmp_name'], $uploadfile);
?>







この例ではファイルのサフィックスはチェックされません、任意のファイルをアップロードでき、非常に便利です 明らかなアップロードの脆弱性

上記は、PHP の脆弱性 (9) - ファイル アップロードの脆弱性の完全な説明です。その他の関連コンテンツについては、PHP の中国語 Web サイト (www.php) に注意してください。 .cn)!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。