$finfo = finfo_open( FILEINFO_MIME ); $mimetype = finfo_file( $finfo , $this->fileInfo['tmp_name'] ); if ( $mimetype == "audio/mpeg; charset=binary" ) { return TRUE; } else { $this->error = "请上传合法文件"; return FALSE; }
为什么有些mp3文件的$mimetype是application/octet-stream; charset=binary,有些是audio/mpeg; charset=binary
application/octet-stream; charset=binary是否安全,或者怎样进一步验证上传的文件是安全的音频文件?
以前,我用 python 写了一个上传文件的白名单,利用白名单内设置的16进制的头,进行比对。希望能给你一个参考。
看看github上面有没有第三方库?
是可以找下对应格式的文件的是对应的头信息(比如 图片文件一般都会在前2个字节标识出其格式 [需要分析读取二进制数据] ),但即使这样仍然不能确保安全,因为即使是二进制数据也可能会被伪造。
参考下 https://segmentfault.com/q/10...