Валидация файлов изображения на NodeJS?

Как проверить, что загружаемый файл является изображением (или чем-то другим)?

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

Насколько вообще надежна такая проверка?
Что мешает злоумышленнику добавить нужные символы в начало файла?

Плюс еще одна проблема: так как на сервер приходят данные в формате multipart form и файл там присутствует не как поток, а как объект File, то придется сначала закачать файл, затем проверить и уже потом удалить, если что-то не так - именно такое решение предлагается по ссылке выше. Мне кажется это как-то не очень...

Поделитесь пожалуйста своими наработками по проверке загружаемых файлов.
  • Вопрос задан
  • 2191 просмотр
Решения вопроса 1
@id194695811
Решение "проверка magic numbers (сигнатур) перед загрузкой" https://gist.github.com/anonymous/3eb41bad8e9bc7ef... или так https://gist.github.com/anonymous/f8d6fc6544be4e04... если с файлом что то не так, он его просто никуда не запишет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
profesor08
@profesor08
Если сомневаешься, то создай картинку на основе данного файла, если все ок, то файл был картинкой.
Ответ написан
dimonchik2013
@dimonchik2013
полковник Андрейченко
обычно imghdr

с битыми джпегами работает неплохо, но не 100%, увы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы