gpt4 book ai didi

php - 我如何允许用户下载存储在 webroot 之外的文件?

转载 作者:可可西里 更新时间:2023-11-01 12:51:06 26 4
gpt4 key购买 nike

我正在开发一个允许注册用户(可以是任何人)上传文件的系统。我已经阻止 mime 类型等以尝试将文件限制为 .doc、.docx 和 .pdf 类型,但为了额外的安全性,它们被上传到 webroot 之外的文件夹。

然后其他用户可以选择下载文件。我如何允许他们这样做?显然我不能只放入文件的链接,因为它在 webroot 之外。我不确定如何访问该文件!我想我可以使用 php 文件函数来访问该文件,但我如何才能将其“提供”给请求它的用户?

所有这些可能会带来哪些安全隐患?

谢谢。

最佳答案

您需要一个执行以下操作的 PHP 脚本:

  1. 正确设置内容类型 header (取决于用户正在下载的内容)
  2. 正确设置内容长度 header (取决于文件大小)
  3. 打开文件进行阅读(可以使用fopen)
  4. 读取文件并将其内容输出到输出流
  5. 完成

您还可以使用 readfile做的功能基本一样。这是来自 PHP 站点的示例:

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>

关于php - 我如何允许用户下载存储在 webroot 之外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4345322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com