Проверка на стороне сервера для проверки того, что загруженный файл является действительным изображением - PullRequest
0 голосов
/ 22 марта 2019

Я создаю очень простую конечную точку для изменения фотографии профиля пользователя и не могу найти подробную информацию о том, как проверить, что загруженный файл является реальным изображением.На сервере я могу легко отфильтровать запросы к моей конечной точке на основе заголовка Content-Type;если заголовок не относится к одному из типов, которые я применяю, то возвращаю 400. Учтите, что я хочу получать только изображения png, jpg или jpeg;моя конечная точка будет иметь условие, показанное ниже:

const validImageMimeTypes = ['image/jpeg', 'image/jpg', 'image/png']

router.put('/:id/avatar', (req, res) => {
  if (!validImageMimeTypes.includes(req.get('content-type'))) {
    res.status(400)
    res.send("Unsupported file type")
    return
  }
  ...
}

Это замечательно, но это не мешает пользователю изменить расширение файла на одно из принудительных и загрузить его.Я попытался сделать именно это с моей аватаркой Github, и их серверная сторона смогла понять, что то, что я загрузил, не было реальным изображением:

{"message":"Expected formats \"png,jpg,gif\", got \"unknown\"",
 "request_id":"F5F0:365D:1EC5D9:226D70:5C94E2AB",
 "errors":[{"resource":"upload","code":"content_mismatch","field":"format"}]}

В общих чертах, какони реализуют эту проверку?Используют ли они библиотеку для получения простых атрибутов из изображения, таких как размер и ширина, и если это не удается, вернуть 400?Какие отраслевые практики я должен знать?

Спасибо

1 Ответ

0 голосов
/ 23 марта 2019

Я нашел пакет JavaScript , чтобы сделать именно то, что мне нужно. Он активно поддерживается и хорошо работает для типов файлов, которые мне нужно проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...