Как проверить, что загружаемый файл является изображением (или чем-то другим)?
Простая проверка mimetype или расширения обходится банальным переименованием файла.
Вот
здесь коллега рекомендует проверять некие "магические числа". Насколько я понимаю, это примерно то же самое, что делает модуль
file-type, который проверяет
if (check([0xFF, 0xD8, 0xFF])) {
return {
ext: 'jpg',
mime: 'image/jpeg'
};
}
Насколько вообще надежна такая проверка?
Что мешает злоумышленнику добавить нужные символы в начало файла?
Плюс еще одна проблема: так как на сервер приходят данные в формате multipart form и файл там присутствует не как поток, а как объект File, то придется сначала закачать файл, затем проверить и уже потом удалить, если что-то не так - именно такое решение предлагается по ссылке выше. Мне кажется это как-то не очень...
Поделитесь пожалуйста своими наработками по проверке загружаемых файлов.