很多时候如果我们的网站允许别人上传文件,那么文件可能是可执行的脚本,可能是病毒或者木马文件,其实这个是非常危险的,如果是脚本的话,可能会在服务器执行,搞很多破坏,比如黑客黑掉你的服务器,勒索你给他比特币之类的
比如把自己的文件后缀改成.jpg、.txt之类的东西,来上传,其实本质病毒文件
病毒脚本是非常的可怕的,因为原则上来说,只要黑客掌握底层的一些技术,就可以利用病毒脚本干各种各样的事情,比如连接你的数据库之类的
对于文件上传这块,核心的就是要进行白名单校验,限制上传文件的类型,只能是我们指定的,而且要限制文件的大小,还要对文件重命名,限制文件类型不能简单的根据后缀来判断,可能后缀被篡改了,要根据文件二进制数据的开头几个字节代表的magic number来判断文件的类型
读取这个文件的二进制数据流,读取开头的几个字节,提取这个文件的魔数,根据魔数的值去判断他是什么类型的
FFD8FF:JEPG
89504E47:PNG
类似这样,以此类推
比如说你的网站要求用户只能上传word类型,png类型,此时你就限制仅仅这几种文件是可以上传的,其他的类型的文件都不让上传
网上可以查到完整的magic number列表,根据那个限制一下,哪些文件类型可以上传,这样就避免说有那种木马、病毒之类的可执行文件被上传了
而且还要限制,不允许用户上传大文件,文件超过一定大小就不让上传了
然后对上传好的文件进行重命名
而且最好对文件进行一定的压缩,这样可以破坏原来的文件结构,避免文件在服务器执行,利用imagemagick这种开源包,可以很方便进行文件缩放