有没有人知道如何在将上传的图像上传到存储桶之前检查上传的图像是否是图像(而不是恶意文件)?我已经创建了将图像上传到存储桶中的所有内容
if (logo) {
//Save photo to bucket
const pathRef = storageRef.ref('logo/' + uid + '/' + logo.name)
pathRef.put(logo).then(() => {
//Get logo URL
const starsRef = storageRef.ref().child('logo/' + uid + '/' + logo.name)
starsRef.getDownloadURL().then((url) => {
//Update photoURL in user
const user = firebase.auth().currentUser
user.updateProfile({
photoURL: url
}).then(() => {
console.log("update successfull")
}).catch((error) => {
console.log(error)
})
}).catch((error) => {
console.log(error)
})
})
我也只接受“输入”中的图像文件
<input style={{ display: "none" }} id="file" type="file" accept="image/*" onChange={props.change}></input>
但我相信通过将任何文件更改为图像格式可以轻松跳过这一点,这意味着任何人都可以放任何东西。我没有找到任何可以在函数或其他任何地方检查的文档
云功能和云存储没有任何内置功能来检查一系列字节是否实际上是图像。对于它们来说,字节只是字节,并且它们不会努力解释这些字节。云存储将“内容类型”存储为blob的一部分,但这并不能保证博客中的内容。该内容类型只是博客的元数据。
如果你想知道一个字节序列是否是某种图像格式(并且有很多:JPG,PNG,GIF等),你将需要使用其他一些软件来解析这些字节以确定它们是否是'重新格式化为您定义可接受的图像。例如,ImageMagick将讲述一个被称为图像的文件内容。