ホームページ  >  記事  >  バックエンド開発  >  PHPのis_uploaded_file関数が原因でファイルをアップロードできない問題の解決策

PHPのis_uploaded_file関数が原因でファイルをアップロードできない問題の解決策

WBOY
WBOYオリジナル
2016-06-20 13:03:121155ブラウズ

ファイルをアップロードできないため、失敗が返されます。調査の結果、PHP の is_uploaded_file 関数が問題を引き起こしていることが判明しました。以下に、同じような状況に陥った友人の参考にしてください。

原因:

あるプロジェクトでは、すべての顧客がファイルをアップロードできず、すべて失敗したというフィードバックをユーザーから受け取りました。調査の結果、PHP の is_uploaded_file 関数が問題を引き起こしていることが判明しました。

詳細分析:

通常の状況では、PHP 経由でファイルをアップロードする場合、is_uploaded_file 関数を使用して、ファイルが HTTP POST 経由でアップロードされるかどうかを判断する必要があります。これを使用すると、悪意のあるユーザーがスクリプトをだまして、次のようなアクセスできないファイルにアクセスできなくなります。 /etc/パスワード。

今回発生した問題は、C:/WINDOWS/Temp/php99.tmp であるはずの tmp_name が C://WINDOWS //Temp//php99.tmp に変更され、is_uploaded_file 関数がエラー情報を返すことです。

処理方法:

次のコードを追加すると、問題は解決します。

$file['tmp_name'] = str_replace('////', '//', $file['tmp_name']);
実際の文字列「////」は 2 つの / であり、他の 2 つはエスケープを表すために使用されることに注意してください。

詳細な研究:

なぜディクテーションの特定の環境でこのようなことが起こるのでしょうか?次の分析を見てみましょう:

; 受信 GET/POST/Cookie データのマジック引用符。
magic_quotes_gpc = オン
PHP のデフォルト設定では、magic_quotes_gpc はオンになっており、magic_quotes_gpc パラメーターがオンになっている PHP 環境では、GET/POST /Cookie にラッシュ効果を自動的に追加します。 addslashes は $_FILES に追加されないことに注意してください。
magic_quotes_gpc が Off の場合、addslashes 関数が $_FILES 配列に追加されるため、問題が発生します。この問題は、magic_quotes_gpc がオフになっている PHP 環境でも発生します。

ところで、SVN の MooPHP コードはこの問題を修正しました。

is_uploaded_file 関数の分析:

ファイルが HTTP POST 経由でアップロードされているかどうかを確認します

bool is_uploaded_file ( string $filename )

filename で指定されたファイルが HTTP POST 経由でアップロードされた場合は TRUE を返します。これを使用すると、悪意のあるユーザーがスクリプトをだまして、/etc/passwd などの本来アクセスできないファイルにアクセスできないようにすることができます。 このチェックは、アップロードされたファイルによってそのコンテンツがシステムのユーザーまたは他のユーザーに表示される可能性がある場合に特に重要です。

is_uploaded_file() 関数が正しく動作するには、$_FILES['userfile']['tmp_name'] のような変数を指定する必要があり、クライアントからアップロードされたファイル名には $_FILES['userfile'] が指定されている必要があります。 ][ 'name'] が正しく動作しません。

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