Sails.js 如何识别上传的图像是恶意的(使用SailsJS和Skipper)?

Sails.js 如何识别上传的图像是恶意的(使用SailsJS和Skipper)?,sails.js,xss,skipper,Sails.js,Xss,Skipper,我遇到了一个关于在SailsJS应用程序中上传图像的有趣问题。我想将图像从前端上传到后端(NodeJs、SailsJS),验证图像(图像),确保图像不包含恶意数据(如图像内容中的隐藏脚本),然后将这些图像发送到AWS存储(S3 bucket)) 在前端,所有操作都是按照SailsJS要求完成的(文本字段在表单顶部,文件在底部) 上传工具: 对于图像上传,我使用skipper(skipper-better-S3),它是SailsJS中的内置模块。Skipper扩展了Sails和Express中使用

我遇到了一个关于在SailsJS应用程序中上传图像的有趣问题。我想将图像从前端上传到后端(NodeJs、SailsJS),验证图像(图像),确保图像不包含恶意数据(如图像内容中的隐藏脚本),然后将这些图像发送到AWS存储(S3 bucket))

在前端,所有操作都是按照SailsJS要求完成的(文本字段在表单顶部,文件在底部)

上传工具:

对于图像上传,我使用skipper(skipper-better-S3),它是SailsJS中的内置模块。Skipper扩展了Sails和Express中使用的HTTP主体解析器

为了实现这一点,我使用下面提到的代码:

Vault.read((错误,结果)=>{
如果(错误){
console.log(“Vault S3错误”,错误);
}否则{
request.file('logo')。上传({
适配器:require('skipper-better-s3'),
键:result.access\u键,
secret:result.secret\u密钥,
bucket:sails.config.s3.bucket,
maxBytes:sails.config.globals.multipleMaxLogoSize,
dirname:`some directory/${client.id}/logo`,
s3config:{
签名版本:“v4”,
是的,
sessionToken:result.security\u令牌
},
S3参数:{
ACL:'私有',
SSEKMSKeyId:process.env.AWS_S3_KMS_KEY_ARN,
ServerSideEncryption:'aws:kms',
}
},(错误,上载的文件)=>{
if(uploadedFiles.length==0?true:Utility.isValidImage(uploadedFiles[0].filename)){
如果(错误){
sails.log.error(错误);
返回response.serverError();
}
如果(uploadedFiles.length>0){
uploadedFiles.forEach(uploadedFile=>{client.logo=`/logo/${client.id}/${uploadedFile[0].fd.split('/').pop()}`;
client.displayName=request.body.displayName?request.body.displayName:client.displayName;
client.save()。然后(()=>{
返回response.ok({});
},(错误)=>{
sails.log.error(错误);
返回response.serverError(error);
}
)})
}else if(条件禁止请求){
返回response.badRequest();
}
}否则{
sails.log.error('Invalid Image Type');
返回response.badRequest('Invalid Image Type');
}
});
}
})

您可以使用ImageMagick获取有关图像的信息,或者在存储图像之前对其进行转换/优化。您也可以使用此处建议的节点virustotal