ホームページ  >  記事  >  バックエンド開発  >  【ヘルプ】is_uploaded_file()の使い方について

【ヘルプ】is_uploaded_file()の使い方について

WBOY
WBOYオリジナル
2016-06-23 14:17:531050ブラウズ

皆さんこんばんは!私はちょうど PHP に触れるようになり、いくつかの教科書を読んでいるときに、この一節について言及しました:

is_uploaded_file() 関数を使用してアップロードされたファイルを判断すると、悪意のあるユーザーがスクリプトをだまして /etc などのアクセスできないファイルにアクセスすることができなくなります。 /password

私の質問は、is_uploaded_file() を使用して検出しない場合、「悪意のあるユーザー」はどのようにしてスクリプトをだまして、アクセスできないコンテンツにアクセスさせることができるのでしょうか?分かりません...ダニエルがもっと簡単に説明してくれると嬉しいです、ありがとう!


ディスカッションへの返信(解決策)

php5.4 以降のバージョンでは、この関数は意味を持ちません

アップロードされたファイルを操作するには、通常、move_uploaded_file 関数を使用します。この関数は、内部で is_uploaded_file も呼び出します
もちろん、あなたが偏見を持っていることを排除することはできません copy 関数を使用する必要があるため、is_uploaded_file があります
明らかに、それが
copy('/etc/password', './ps')
であれば、システムパスワードファイルをコピーできます
もちろん、あなたのコードはそうではありません。 このように書くには、
copy($file_tmp, $target) と書くことができます
$file_tmp の値が /etc/password の場合でも、システム パスワード ファイルをコピーできます
したがって、 $file_tmp is_uploaded_file をチェックするためにこれを行う必要があります

それでは、$file_tmp はプログラム内の変数であると言うでしょうが、どのように値を割り当てることができるでしょうか?
問題は php の自動登録スイッチにあります
register_globals = on の場合
受信データはグローバル変数になります。たとえば、?file_tmp=xxxx には値が xxxx の $file_tmp 変数があり、名前は file になります。アップロード コントロールは $file_tmp も生成します
この時点で、url パラメーターを使用して php をチートできることがわかりました

このため、
php 5.3 のデフォルトは register_globals = off であり、オンにすることはお勧めできません
php 5.4以降のバージョン register_globals 切り替えはキャンセルされました

php5.4 以降のバージョンでは、この関数は意味を持ちません


アップロードされたファイルを操作するには、通常、move_uploaded_file 関数を使用します。この関数は、内部的に is_uploaded_file も呼び出します
もちろん、 copy 関数を使用する必要がある可能性を排除することはできません。それが is_uploaded_file である理由です
copy('/etc/password', './ps')
であれば、システム パスワード ファイルをコピーできます
もちろん、コードはこのようには書かれません。
copy($file_tmp, $target) と書くこともできます
$file_tmp の値が /etc/password の場合でも、システム パスワード ファイルをコピーできます
したがって、 is_uploaded_file を実行する必要がありますこの $file_tmp を確認してください

では、$file_tmp はプログラム内の変数ですが、どのように値を割り当てることができるのでしょうか?
問題は php の自動登録スイッチにあります
register_globals = on の場合
受信データはグローバル変数になります。たとえば、?file_tmp=xxxx には値が xxxx の $file_tmp 変数があり、名前は file になります。アップロード コントロールは $file_tmp も生成します
この時点で、url パラメーターを使用して php をチートできることがわかりました

このため、
php 5.3 のデフォルトは register_globals = off であり、オンにすることはお勧めできません
php 5.4以降のバージョン register_globals 切り替えはキャンセルされました

ありがとう〜今理解しました〜

静かに収集します

何が起こっているのか知っていますし、学びます

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