使用文件后缀和mime类型检测
通常我们想严格限制文件类型的时候,可以简单地用$_files[‘myfile’][‘type’] 取得文件的 mime类型然后来检测它是否是合法的类型。
或者我们可以取文件名的最后几个字符来获取文件后缀,不幸的是,这些方法并不足够,可以很容易地改变文件的扩展名绕过这个限制。此外,mime类型信息是由浏览器发送的,而且,对于大多数浏览器,即使不是全部,是根据文件的扩展名的来给出mime类型信息的!因此,mime类型,就像扩展名一样,可以很容易地欺骗。
使用“魔术字节”
确定文件类型的最佳方法是通过检查文件的前几个字节 – 称为“魔字节”。魔术字节本质上是文件头中不同长度在2到40个字节之间的,或在文件末尾的签名。有上百个类型的文件,他们中相当多的文件类型有好几个文件签名与它们相关联。在这里你可以看到一个文件签名列表。
偷懒的办法是使用fileinfo扩展,php 5.3.0 默认是启用的(根据官方manual),如果没有启用,你可以自己启用
如在windows下面:
复制代码 代码如下:
extension=php_fileinfo.dll
linux下面:
复制代码 代码如下:
extension=fileinfo.so
#如不能正常工作,再加上下面这条
#mime_magic.magicfile=/usr/share/file/magic
windows下面如不能正常工作:
可参考电脑自动关机代码:/d/file/titlepic/fileinfo.installation.php />
下载file-5.03-bin.zip ,解压出来,在其中的share目录有magic.mgc 、magic 两个文件。
然后添加一个名为magic的系统环境变量指向magic 文件。如d:\software\php\extras\misc\magic
复制代码 代码如下:
function getfilemimetype($file) {
$buffer = file_get_contents($file);
$finfo = new finfo(fileinfo_mime_t修辞手法有几种ype);
return $finfo->buffer($buffer);
}
$mime_type = getfilemimetype($file);
switch($mime_type) {
ca “image/jpeg”:
// your actions go here…
}
处理图像上传
如果你打算只允许图像上传,那么你可以使用内置的getimagesize()函数,以确保用户实际上是上传一个有效的图像文件。如果该文件不是有效的图像文件,这个函数返回fal。
复制代码 代码如下:
// 假设fil刻舟求剑古文e input 域的name 属性为myfile
$tempfile = $_files[‘myfile’][‘tmp_name’]; // path of the temp file created by php during upload
$imginfo_array = getimagesize($tempfile); // returns a fal if not a valid image file
if ($imginfo_array !== fal) {
$mime_type = $imginfo_array[‘mime’];
switch($mime_type) {
ca “image/jpeg”:
// your actions go here…
}
}
el {
echo “this is not a valid image file”;
}
手动读取和解释“魔法字节”
如果由于某种原因,你不能安装fileinfo扩展,那么你仍然可以手动确定,通过读取文件的前几个字节,并比较它们与已知的魔法与特定文件类型相关联的字节的文件类型。这个过程肯定少许的试验和错误,因为还有一种可能,有少数非法的魔法字节与合法文件格式关联了。
然而这不是不可能的,几年前,我被要求做一个只允许真正的 mp3 文件上传的脚本文件,并且,当时我们不能用 fileinfo, 我们只能依靠这种手动检测的方式了.
我花了一段时间来解析一些mp3文件的非法魔法字节,但很快,我得到了一个稳定的上传脚本。
在本文结束前,我想给大家一个警告: 确保你永远没有调用一个 include() 来包含一个上传的文件,因为php代码很可能会巧妙地隐藏在图片里面,并且图片也可以成功的通过你的文件检测,当米饭夹生怎么办这样的脚本运行时,只可能给系统带来破坏。
译自:http://designshack.co.uk/articles/php-articles/smart-file-type-detection-儿童环保服装设计图using-php/
本文发布于:2023-04-06 11:14:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/398e9f374e62dd622d901368b8b48d95.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:利用PHP实现智能文件类型检测的实现代码.doc
本文 PDF 下载地址:利用PHP实现智能文件类型检测的实现代码.pdf
留言与评论(共有 0 条评论) |