Word Excel pdfなどのアップロードファイルを検証するためにファイル拡張子を使用しますか?
ただし、ユーザーがファイル拡張子を変更した場合は、必要なファイルをアップロードできます。
ユーザーがファイル拡張子を変更した後、ファイルをアップロードできないようにした場合に、そのチェックタイプのファイルを機能させたいです。
誰も助けることができます
Word Excel pdfなどのアップロードファイルを検証するためにファイル拡張子を使用しますか?
ただし、ユーザーがファイル拡張子を変更した場合は、必要なファイルをアップロードできます。
ユーザーがファイル拡張子を変更した後、ファイルをアップロードできないようにした場合に、そのチェックタイプのファイルを機能させたいです。
誰も助けることができます
次の例のように、MIME タイプも確認する必要があります。
$allowedMimes = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/bmp', 'image/wbmp');
//getting the mime type (it can be different from the extension) Be careful!
$imgInfo = getimagesize(imagePath);
$type = strtolower($imgInfo['mime']);
//hey dude!! This is a fake image!!
if(!in_array($type, $allowedMimes)){
//We delete it!!
unlink(imagePath);
}else{
//do whatever with the image...
}
MIME タイプの詳細については、こちらを参照してください。
安全であるために
タイプに関係なく、すべてのファイルを webroot から移動します。
スクリプト、download.php などを用意し、ファイルの ID を取得し、誰がログインしているかを確認し、すべてがチェックアウトされたら、ファイルを取得し、ブラウザーに読み込んで、適切なダウンロード ヘッダーを送信します。
header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=file.ext');
header("Content-Length: " . filesize('../not_in_web_root/file.ext'));
header("Content-Transfer-Encoding: binary");
readfile('../not_in_web_root/file.ext');
exit;
画像のみを許可する場合は、画像のサイズがある場合は のような関数を使用しますがgetimagesize()
、PHP が埋め込まれている可能性があるため、画像への直接アクセスを許可しないでください。
ユーザーにファイルシステム機能を提供する場合は、実際のファイルにアクセスしないデータベース内の値に基づいて、それを仮想機能にします。
あなたはおそらくファイルのmimeタイプを見ることができますか?http://us2.php.net/manual/en/fileinfo.constants.php