2

アップロードするファイルの種類を確認したいのですが、信頼できる方法を教えてください。その場合、ファイルの種類に関するより正確な情報を入手できますか? これで:

$_files['uploaded_file']['type']

またはこれで:

$imgType = getimagesize($_files['uploaded_file']['tmp_name']);
$imgType['mime'];

?

4

6 に答える 6

6

$_FILES['uploaded_file']['type']ユーザー入力 - クライアントによって定義された任意の文字列です。したがって、何にでも使用するのは安全ではありません。

getimagesize()より安全な方法ですが、完全に保護されるわけではありません。

次のことも必要です。

  • 独自に考案した名前を付けて、ローカル サーバーにファイルを保存します。ローカル ファイル システムのファイル名を生成するためにユーザー入力に依存するのは安全ではありません。
  • GD を使用して、ピクセル データをソース ファイルから宛先ファイルにコピーします。getimagesize()ファイルに関連付けられたメタ データのみを参照し、ファイル データは参照しません。画像のように見えるものの中に悪意のあるコードを隠すことができます。画像を再サンプリングしたら、アップロードされたファイルがサーバーから削除されていることを確認してください。
  • ファイルがローカル ファイル システムに保存され、必要最小限のアクセス許可と制限付きの所有者/グループがあることを確認してください。
于 2012-09-04T10:59:27.133 に答える
3

$_FILES[...]['type']決して信頼できるものではなく、ユーザーが指定した任意の値です。getimagesizeexif_imagetypeまたはfinfoは、取得したものを確認するための推奨される方法です。アップロードによるセキュリティの脅威も参照してください。

于 2012-09-04T10:57:35.107 に答える
2

私はgetimagesizeを信頼します

アップロードされたファイルの種類は誰でも編集できるため、Firefox の改ざんデータ アドオンのような HTTP/HTTPS ヘッダーを使用する

于 2012-09-04T10:59:06.937 に答える
1

を使用すると、ファイルの環境定義 (GD モジュール mime データベース)を使用getimagesize()するため、より一貫した mime 情報が提供されます。mime-type

のみに依存している場合は$_FILES['uploaded_file']['type']、クライアント コンピュータ (ブラウザなど) で定義されている MIME タイプが含まれるか、ブラウザが MIME タイプを送信しない場合があります。

これの非常にばかげた例の 1 つは、checking です。これは、 MIME タイプif($_FILES['uploaded_file']['type'] == 'image/jpeg')を送信する IE6/7 を使用すると失敗する可能性があります。'image/pjpeg'

これらの両方の代替手段は usingmime_content_type()ですが、PECLモジュールとして非推奨になっているため、PHP 5.3.0の時点で、どのファイルタイプでもより一貫して動作するFileInfo関数があります-ただし、テストしていません.

MIME タイプの概要については、この SO 記事を確認してください: How do I find the mime-type of a file with php?

于 2012-09-04T11:20:17.400 に答える
1

実際には、おそらく画像に付属するメタデータ ( $_files['uploaded_file']['type']) を使用する必要がありますが、これはアップロード前に改ざんされる可能性があります。

サイズ重視の方は、 で実際に画像を測るよりも早いのでこちらを使ってgetimagesizeください。ただし、ファイルタイプ情報が必要な場合は、ファイルが「言う」ことを超えてチェックすることをお勧めします。単純なチェックで実行可能ファイルを盗むのは簡単だからです。

于 2012-09-04T10:58:28.870 に答える
0

決して信用しないでください$_FILES["image"]["type"]。ブラウザから送信されたものは何でも取得するため、画像の種類としてこれを信頼しないでください。だから使用するgetimagesize()か、より安全な側に置きたい場合は使用してくださいfinfo_open

ソース: http://php.net/manual/en/reserved.variables.files.php

于 2012-09-04T11:05:25.057 に答える