Я использую NodeJS/Formableable, и я пытаюсь защитить свой сервер для загрузки изображений.NodeJS/Исключительно: защитите бэкэнд для загрузки изображений
Классический способ проверить, является ли файл изображения, чтобы использовать регулярное выражение как это:
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);
}
Это хорошая проверка, но это не достаточно быть в безопасности; на самом деле, если я переименую PDF как JPG, например, браузер предоставит MIME/type: image/jpg на основе расширения файла. Это проблема безопасности, потому что вы можете переименовать JS-файл или что-нибудь в JPG и загрузить его в свою файловую систему.
Я нашел это очень интересный пост: How to check file MIME type with javascript before upload?
Это идеально подходит для проверки на стороне клиента, но я не в состоянии воспроизвести это в моем внутреннем интерфейсе.
Я думаю, что идеальным способом является анализ потока «на лету» и проверка реального типа MIME после загрузки первых 4 байтов.
Любая идея?
Thx!
Спасибо, это звучит очень хорошо! –