1.先讲下php文件上传该注意哪些安全问题吧
文件类型mime和后缀名判断 (可能会被用户恶意修改)
文件一定要重命名
文件存放目录不应用可执行权限
文件大小的控制.
2.说说这个文件类型的判断
根据后缀名判断:大家都知道,不是很准确,可能会被用户恶意修改
比较有效的方法就是判断文件的二进制流的前几个字节的数据
相应文件对应的二进制数据,大家可以在这儿网址下去查
http://www.filesignatures.net/index.php?page=all¤tpage=4&order=EXT
判断方法:
$fp = fopen($filename, 'rb');
$buffer = fread($fp,8); //读取几个字节应该参照上面的网站上查询的结果为准
fclose($fp);
$buffer = unpack('H*', $buffer); //转换为16进制
$buffer = unpack('C8code',$buffer)//也可以转换为10进制
然后用$buffer 与网址上的数据进行对比即可.
自己实现下哈,实践出真知.
有时候对于图片可能会造假,上述方法可能查不出来,使用以下方法吧
function_exists('getimagesize') && !@getimagesize($filename)
目前所知的比较好的方法了,大家如果还有其他的方式,欢迎分享