0

重複の可能性:
PHPでアップロードされたファイルのファイルタイプを確認するには?

テキストファイルを作成して名前を変更しanything.jpg、facebook にアップロードしようとすると、facebook はファイルが画像ではないことを検出し、そのPlease select an image fileようなことを言います。どうやってやっているの?

要素とともにlocalhostダミーのhtmlを作成してテストし、テキストファイルの名前を変更して作成した画像ファイルをアップロードすると、ファイルタイプが表示されました...ユーザーがそのような「偽の」画像をアップロードするのをブロックするにはどうすればよいですか. 制限の使用は解決策ではないと思いますよね?form<input type="file"...something.jpg$_FILES['control_name']['type']image/jpeg$_FILES['control_name']['type']

4

3 に答える 3

2

サーバー上で画像を処理する場合は、画像操作ライブラリ (getimagesizeたとえば) を使用して、幅と高さを検出します。これが失敗した場合は、イメージを拒否します。とにかくサムネイルを生成するためにおそらくそれを行うので、それは1つの追加のようなものifです.

于 2013-02-03T13:05:14.123 に答える
1

実際のファイルをチェックする方法はたくさんあります。Facebookがそれをどのように行うか、それを作成した人だけが私が思うことを知っています:)。

ほとんどの場合、ファイルの最初のバイトを調べます。すべてのファイルには、それらが実際に何であるかを説明する特定のバイトがあります。ただし、これには、アップロードを検証できるデータベースなどを作成するための時間とお金が必要です。

より一般的な解決策は次のとおりです。

FORM属性

もちろん、Internet Explorerを除く多くのブラウザでは、拡張機能のクライアント側をチェックするaccept属性を設定できます。詳細はこちら:ファイル入力'accept'属性-便利ですか?

拡大

スクリプトは画像拡張子を付けて保存できるため、これは実際には安全ではありません。

ファイルの読み取りMIMEタイプ

これはあなたがあなたの質問で述べたような解決策です。ただし、これは簡単に回避でき、サーバーの最新のステータスに依存します。

画像の処理

(ほとんどの開発者のスキルと利用可能な時間に対して)最も信頼できるのは、画像をテストとして処理することです。GDやImagicのようなライブラリに入れてください。画像が実際には画像ではない場合、エラーが発生します。ただし、これには、そのソフトウェアを最新の状態に保つ必要があります。

要するに、何時間も費やさずにこれをキャッチする100%の保証はありません。それでも、99,9%しか得られません。上記のオプションと利用可能な時間を比較検討し、最適なものを選択する必要があります。ベストプラクティスとして、3つすべての組み合わせをお勧めします。

このトピックは、セキュリティ:画像ファイルのアップロードを検証する方法でも説明されています。

于 2013-02-03T13:12:45.147 に答える
0

ファイルのヘッダーは同じではありません。

于 2013-02-03T13:07:04.870 に答える