sf8*_*f89 44 php file-upload image getimagesize
有没有办法确保收到的文件是图像PHP?
测试扩展对我来说听起来不太安全,因为您可以上传script并将其扩展名更改为您想要的任何内容.
我也试过使用getimagesize,但可能有更适合那个特定问题的东西.
小智 68
在和getimagesize()应制定文件是否是一个图像的最明确的方式:
if(@is_array(getimagesize($mediapath))){
$image = true;
} else {
$image = false;
}
Run Code Online (Sandbox Code Playgroud)
因为这是一个示例getimagesize()输出:
Array (
[0] => 800
[1] => 450
[2] => 2
[3] => width="800" height="450"
[bits] => 8
[channels] => 3
[mime] => image/jpeg)
Run Code Online (Sandbox Code Playgroud)
Dea*_*Man 21
获取mimetype的本地方式:
对于PHP <5.3,使用mime_content_type()
对于PHP> = 5.3,使用finfo_open()或mime_content_type()
获取MimeType的替代方法是exif_imagetype和getimagesize,但这些依赖于安装了适当的库.此外,他们可能只返回图像mimetypes,而不是magic.mime中给出的整个列表.
虽然mime_content_type可以从PHP 4.3获得,但它是FileInfo扩展的一部分(默认情况下从PHP 5.3开始启用,除了Windows平台,必须手动启用它,详情请参见此处).
如果您不想打扰系统上的可用内容,只需将所有四个函数包装到一个代理方法中,该方法将函数调用委托给任何可用的函数,例如
function getMimeType($filename)
{
$mimetype = false;
if(function_exists('finfo_open')) {
// open with FileInfo
} elseif(function_exists('getimagesize')) {
// open with GD
} elseif(function_exists('exif_imagetype')) {
// open with EXIF
} elseif(function_exists('mime_content_type')) {
$mimetype = mime_content_type($filename);
}
return $mimetype;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
使用文件扩展名和getimagesize函数来检测上传文件是否具有正确的格式只是入门级检查,它可以通过上传具有真正扩展名的文件和图像标题的某个字节但是内容错误来绕过.
为了安全和安全,您可以对上传的图片进行缩略图/调整大小(即使使用原始图像大小),并保存此版本而不是上传的版本.还可以获取上传的文件内容并搜索特殊字符,例如<?php找到文件是否为图像.
| 归档时间: |
|
| 查看次数: |
110546 次 |
| 最近记录: |