从外部网站根目录下载(使用 href 下载?



我正在研究文件存储,我的设计是显示数据库中有关文件的数据以及一个带有a href标签的按钮来下载我的文件。当我将存储保存在我的网站根目录中时,我成功地完成了所有这些工作 - 但根据建议,我进行了更改。

我现在在我的 C:/驱动器中有我的项目根目录,但我的存储我想在根之外,但由于安全性,根据建议,我将我的存储保存在我的 d:/驱动器中 - 以及我的 d:/驱动器无论如何都是我的云存储。从我在网上看到的情况来看,这意味着我不能再使用<a href="d:/storage/Username/file download>来下载我的文件了!

如果这是真的,你如何从你的网站根目录之外下载?

如果没有,我如何通过使用 href 方法在根目录之外下载的安全限制?

谢谢!

你可以使用 readfile((

要么链接到下载器.php?f=somefile.jpg 使用重写规则。

在下载器中.php执行以下操作

<?php
$path = 'D:/map/';
if( login_check($user) && is_file($path . $_GET['f']) ) {
header('Content-Type: image/jpeg');
readfile($path . $_GET['f']);
}
?>

我添加了 login_check((,因为您提到了有关安全性的内容。 此外,建议检查参数中的非法字符(尤其是斜杠( 内容类型可能因所选文件而异

让它工作,感谢伊沃 P 的开始。

我首先发送下载.php我的文件名、文件扩展名和文件路径都用 * 分隔(* 不是允许的文件名(。一个例子是:

download.php?f=myTextFile*txt*d:/storage/test/myTextFile.txt

然后,我将 $_GET['f'] 分解为 *,确保数组大小为 3,然后设置内容标头:

$file_info = explode("*", $_GET['f'], 3);
if(is_file($file_info[2]) && count($file_info) == 3) {
header('Content-Description: File Transfer');
header("Content-Type: " . mime_content_type($file_info[2]));
header('Content-Disposition: attachment; filename="'.$file_info[0] . '.' .$file_info[1].'"');
header('Expires: 0');
header('Pragma: public');
readfile($file_info[2]);
}

这对我来说是可行的解决方案!在 txt、jpg 和 exe 上测试过 - 运行良好。我为我的项目测试提供了其他个性化设置,以确保"f"有效(因此用户不能通过转到地址栏并弄乱事情来搞砸它,请参阅real_escape_string(,但这就是它的要点!

感谢Bjorn进行编辑:请记住,这允许完全访问服务器,确保您个性化自己的下载.php接受遵循自己格式的输入(否则任何人都可以窃取您的php文件,js文件等!

最新更新