全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

inputfile限制文件类型详解

发布时间:2023-11-25 03:14:10
发布人:xqq

一、为什么需要限制文件类型

在前后端交互的过程中,我们经常需要上传和下载文件。但是文件类型有可能是恶意文件,例如:病毒、木马等。限制文件类型可以避免恶意文件的上传和下载,保证网站的安全。

二、前端限制文件类型的方式

前端根据不同浏览器的API,可以通过以下方式来限制文件类型:

1、设置文件类型的accept属性


  

  

accept属性控制文件选取对话框只弹出指定类型文件,但是用户仍然可以通过修改文件扩展名来绕过验证,所以需要在后端再次验证文件类型。

2、使用FileReader对象读取文件类型


  
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = () => {
  const result = reader.result;
  const arr = new Uint8Array(result);
  const header = [];
  for (let i = 0; i < arr.length; i++) {
    header.push(arr[i].toString(16));
  }
  const fileType = getFileType(header.join(''));
};
reader.readAsArrayBuffer(file);

function getFileType(head) {
  switch (head) {
    case '89504e47':
      return 'image/png';
    case '47494638':
      return 'image/gif';
    case '25504446':
      return 'application/pdf';
    default:
      return 'unknown';
  }
}
  

使用FileReader对象读取文件,获取文件的字节流,根据字节流的前几位,判断文件类型。但是这种方式只能读取文件的前几个字节,可能存在误判,需要后端再次验证。

三、后端限制文件类型的方式

后端也需要对文件类型进行验证,避免绕过前端验证的恶意文件被上传。

1、使用mime类型判断文件类型


  
const fs = require('fs');
const fileType = require('file-type');

const file = fs.readFileSync('/path/to/file');
const mime = fileType(file).mime;
if (!/^(image\/|video\/|audio\/)/.test(mime)) {
  console.log('文件类型错误');
}
  

使用file-type插件获取文件的mime类型,根据mime类型判断文件类型是否符合规定。缺点是文件没有扩展名时无法判断。

2、使用扩展名判断文件类型


  
const path = require('path');

const extname = path.extname('/path/to/file');
if (!/^(.jpg|.jpeg|.png)$/i.test(extname)) {
  console.log('文件类型错误');
}
  

通过文件的扩展名判断文件类型是否符合规定。但是扩展名是可以被修改的,所以需要结合mime类型验证。

四、总结

前后端都需要对文件类型进行验证,可以通过accept属性、FileReader对象、mime类型、扩展名等方式进行验证。建议采用多种方式结合,提高验证的准确性。

inputfile限制文件类型

相关文章

如何在Windows中查看环境变量

如何在Windows中查看环境变量

2023-11-25
防火墙端口linux,防火墙端口配置策略和步骤

防火墙端口linux,防火墙端口配置策略和步骤

2023-11-25
Minio Browser漏洞详解

Minio Browser漏洞详解

2023-11-25
Teamspeak3如何创建服务器

Teamspeak3如何创建服务器

2023-11-25

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取