很多时候如果我们的网站允许别人上传文件,那么文件可能是可执行的脚本,或者病毒或者木马文件。如果是脚本的话,可能会在服务器执行,搞很多破坏。

黑客将病毒文件后缀改成.jpg,.txt之类的文件。
病毒脚本是非常可怕的,因为原则上来说,只要黑客掌握底层的一些基数,就可以利用病毒脚本干各种各样的事情,比如连接你的数据库之类的。

解决方案

  • 对文件上传这块,核心就是要进行白名单的校验,限制文件上传的类型。限制文件类型不能简单的根据后缀来判断,可能后缀被篡改了,要根据文件二进制数据的开头几个字节代表的magic number(魔术数字)来判断文件的类型。
  • 同时要限制文件的大小,不允许用户上传大文件,文件超过一定大小就不让上传。
  • 还要对文件重命名。
  • 最好对文件进行一定的压缩,这样可以破坏原来的文件结构,避免文件在服务器执行,利用 imagemagick 这种开源包,可以很方便进行文件缩放。

读取这个文件的二进制数据流,读取开头的几个字节,提取这个文件的魔术数字,根据魔术数字的值取判断他是什么类型
FFD8FF: JPEG89504E47: PNG 以此类推。(魔术数字完整列表请百度自查)