PHP脚本可以通过这种方法下载.预防



我正在用这种方法编写我的应用程序。我想要一个无法通过 URL 访问的私有目录。所以我有一个htaccess,当您访问照片文件夹时成功重定向。我有这种结构的文件。

我的应用|[]照片| .htaccess|加载照片.php|首页.php

当你访问家庭.php时,我在一行通过Loadthephoto.php提供图像。里面的代码是

    $resultLoad = getUserDetails($db,"photo","user_details",$_SESSION['theUserskey']);
    $photosName = $resultLoad['photo'];
    $file = 'photos/'.$photosName;
    $temp = explode(".", $photosName);
    $type = 'image/'.end($temp);
    header('Content-Type:'.$type);
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit();

它工作正常。问题是它会产生一个像这样的 html <img src="loadthephoto.php"> ,如果你访问 url/loadthephoto.php让它可下载。我不要这个。

首先,这种方式对于提供"私有"图像是否正确?如果可以用这种方式实现,我怎样才能使加载照片.php为不可下载?

另一种方法是使照片文件夹可以从 url 访问,并使用经典 URL 方式生成图像。

在提供文件之前,您应该检查文件MIME类型和/或扩展名。不建议检查扩展名,因为任何人都可以上传带有 txt 扩展名的图像。

你的代码已经完成了一半,但你正在从一个扩展名创建一个 mime 类型,这也是不明智的image/jpg因为这不是一个正确的 mime 类型,它应该是image/jpeg的。

$resultLoad = getUserDetails($db,"photo","user_details",$_SESSION['theUserskey']);
$photosName = $resultLoad['photo'];
$file = 'photos/' . $photosName;
// Check mime type
$mime = mime_content_type($file);
$validMimes = ['image/jpeg', 'image/gif', 'image/png', 'image/svg+xml'];
// Refuse to serve invalid files
if (!in_array($mime, $validMimes)) {
    die('Invalid file type');
}
header('Content-Type:' . $mime);
header('Content-Length: ' . filesize($file));
readfile($file);
exit();

最新更新