NodeJS/Formidableを使用しており、画像のアップロードのためにバックエンドを保護しようとしています。NodeJS/Formidable:画像アップロードのバックエンドを保護する
ファイルが画像であるかどうかを確認するための古典的な方法は、次のように正規表現を使用することです:
if(!file.name || file.name.match(/\.(jpg|jpeg|png)$/i)) {
console.log("the file is an image");
}else{
console.log("the file is not an image");
}
と、この:
var fileType = file.type.split('/').pop();
if(fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg'){
console.log("the file is an image");
} else {
console.log('incorrect file type: ' + fileType);
}
これは良いチェックが、これはに十分ではありません安全であること。例えば、JPGのようにPDFの名前を変更すると、ブラウザはファイルの拡張子に基づいてMIME/type:image/jpgを提供します。 これはセキュリティ上の問題です.JSファイルなどの名前をJPGに変更し、バックエンドファイルシステムにアップロードすることができるからです。
が、私はこれは本当に興味深い記事を見つけました: How to check file MIME type with javascript before upload?これは、クライアント側のチェックに最適ですが、私は私のバックエンドでこれを再現することができませんよ。
私は理想的な方法は、オンザフライでストリームを分析し、最初の4バイトのアップロード後に実際のMIMEタイプをチェックすることだと思います。
Thx!
おかげで、それは本当にいいですね! –