提问人:macalaca 提问时间:3/23/2019 更新时间:3/23/2019 访问量:623
服务器端验证,以验证上传的文件是否为实际图像
Server-side validation to verify an uploaded file is an actual image
问:
我正在构建一个非常简单的端点来更改用户的个人资料照片,但找不到有关如何验证上传的文件是否为真实图像的详细信息。在服务器上,我可以根据标头轻松过滤掉对端点的请求;如果标头不是我要强制执行的类型之一,则返回 400。考虑到我只想接收 png、jpg 或 jpeg 的图像;我的终结点将具有如下所示的条件:Content-Type
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?我应该注意哪些行业惯例?
谢谢
答:
0赞
macalaca
3/23/2019
#1
我找到了一个 JavaScript 包来做我需要的事情。它得到了积极的维护,并且适用于我需要检查的文件类型。
评论