我正在构建一个PHP网络应用程序,它包括图像上传。我读过关于防止上传虚假图像的信息。但是什么是假图像,它们如何被用来攻击服务器?
使用PHP函数getimagesize()
以及检查文件扩展名以消除通过图像进行的所有可能的攻击是否足够?
假图像的一个例子是有人上传PHP文件而不是图像,然后欺骗服务器执行它。有几种方法可以防止此类攻击,包括防止用户选择用于在服务器上存储图像的文件扩展名,以及将上传的图像存储在文档根目录之外(在需要时使用 file_get_contents
读取它们)。
为了很好地解释阅读哪些假图像@Chris解释。
假图像的目的是将可执行代码放在您的服务器上,因此将用户上传的图像存储在文档根目录之外是一个好主意。另一个好主意是检查文件是否真的是图像。
检查文件是否为有效图像的最快方法可能是:
function isValidImage($file) {
return ( false === exif_imagetype($file) ) ? FALSE : TRUE;
}
查看 http://php.net/manual/en/function.exif-imagetype.php 以获取更多信息和示例。