ホームページ > バックエンド開発 > PHPチュートリアル > php_PHP チュートリアルでのファイルアップロードのセキュリティ問題

php_PHP チュートリアルでのファイルアップロードのセキュリティ問題

WBOY
リリース: 2016-07-21 16:10:33
オリジナル
950 人が閲覧しました


/etc/passwd!

この段落を読むことができます。 。

[ファイルのアップロード]
PHP は、RFC 1867 に基づいてファイルのアップロードを自動的にサポートします。次の例を見てみましょう:

= "ファイル" 名前 = "こんにちは" >
上記のコードにより、ユーザーはローカル マシンからファイルを選択でき、送信をクリックすると、ファイルがサーバーにアップロードされます。これは明らかに便利な機能ですが、PHP の応答方法により安全ではありません。 PHP がそのようなリクエストを初めて受信すると、呼び出された PHP コードの解析を開始する前でも、まずリモート ユーザーからファイルを受け入れ、ファイルの長さが「$MAX_FILE_SIZE 変数」で定義された値を超えているかどうかを確認します。テスト用に、ファイルはローカルの一時ディレクトリに保存されます。

したがって、PHP プログラムがファイルのアップロードを受け入れるかどうかを決定する前に、攻撃者は PHP を実行しているホストに任意のファイルを送信することができます。

ここでは、ファイルのアップロードを使用してサーバー上で DOS 攻撃を実行する可能性については説明しません。

ファイルのアップロードを処理する PHP プログラムを考えてみましょう。ファイルは受信され、サーバーに保存されます (場所は構成ファイルで指定されており、通常は /tmp)。拡張子は通常、次のようなランダムです。 「phpxXuoXG」という形式。 PHP プログラムはファイルを処理するためにファイルの情報をアップロードする必要があります。これには 2 つの方法があります。1 つは PHP 3 ですでに使用されており、もう 1 つは以前の方法に関するセキュリティ アドバイザリを作成した後に導入されました。

しかし、問題は依然として存在しており、ほとんどの PHP プログラムはアップロードされたファイルを処理するために依然として古い方法を使用していると断言できます。 PHP は、上記の例のように、アップロードされたファイルを記述するために 4 つのグローバル変数を設定します:

$hello = ローカル マシン上のファイル名 (例: "/tmp/phpxXuoXG")
$hello_size = ファイルのバイト単位のサイズ (例: 1024)
$hello_name = リモート システム上のファイルの元の名前 (例: "c:\temp\hello.txt")
$hello_type = アップロードされたファイルの MIME タイプ (例: "text/plain")

その後、PHP プログラムが処理を開始します。 "$hello" で指定されたファイルにコピーする場合、問題は、"$hello" が必ずしも PHP によって設定された変数である必要はなく、リモート ユーザーなら誰でも指定できることです。次のメソッドを使用すると:

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

結果は次の PHP グローバル変数になります (もちろん POSTメソッドも Yes (cookie も)):

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"

上記のフォームデータはPHP プログラムが予期する十分な変数が含まれていますが、現時点では、PHP プログラムはアップロードされたファイルを処理せず、代わりに「/etc/passwd」を処理します (通常はコンテンツが公開されます)。この攻撃を使用すると、機密ファイルの内容が暴露される可能性があります。





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

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/314189.html技術記事 /etc/passwd のこの段落を読んでください。 。 [ファイルのアップロード] PHP は、RFC 1867 に基づいてファイルのアップロードを自動的にサポートします。次の例を見てみましょう: FORM METHOD="POST" ENCTYPE="multipart/form-data" INPUT...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート