私はここ数週間このトピックを研究してきましたが、それに対する決定的な答えが見つからないというのは本当に私を悩ませ始めています。
ユーザーが自分のプロフィール写真をアップロードできるウェブサイトがあります。アップロードが許可されているファイルがJPEG、GIF、PNGのみであることを確認したい
明らかに、ブラウザから送信されたmimeタイプを使用して検証することは、簡単になりすましてそのルールを排除できるため、大したことではありません。ファイル拡張子で検証しないことは言うまでもありません。
次に、PHPが提供する新しい(ish)finfo関数があります。これは利用可能な最善の方法のように思われるので、当分の間これを使用していますが、http://www.php.net/manual/en/ref.fileinfo.phpのコメントを読むと、だまされる可能性もあるようです。また、返されるMIMEタイプがimage / jpeg、image / gif、またはimage / pngであるかどうかを確認するだけでは、制限が厳しすぎるかどうかわかりません。
次に、私が読んだgetimagesize()関数は、完璧に見える画像ではないものに対してfalseを返しますが、その場合、なぜここでfinfoを使用するという多くの受け入れられた答えがあるのですか?
最後に、system()またはexec()呼び出しがあります。これは、ユーザーがシステム呼び出しの一部を指定できるようにするのは少し危険なようです。
だから私の質問は、どの方法を使うべきかということです。スクリプトをできるだけ安全にするだけでなく、十分にオープンにして、通常のユーザーがスクリプトによって拒否された有効な画像で罰せられないようにしたい