gpt4 book ai didi

php - 在 PHP 中保护文件上传的好方法

转载 作者:行者123 更新时间:2023-12-04 14:39:03 27 4
gpt4 key购买 nike

编写一个小应用程序(除其他外)允许用户上传文件(如图像、.doc 或文本文件)作为他们发布的一部分/提交。

我们目前的原型(prototype)只是将文件转储到/{app_root}/files/,当然,任何人都可以访问它,即使他们没有登录或使用系统。目标是仅在用户登录并且实际上有权访问文件所属的帖子时才授予对文件的访问权限(查看访问权限)。

所以,简而言之,我正在寻找一种好方法来做到这一点。

我正在考虑在 /web/ (http) 文件夹之外创建一个文件夹,然后让 PHP 使用 header() 命令,或者,也许只是将文件转储到数据库中?然而,我从来没有做过任何一个。

虽然我怀疑我最终能解决这个问题,但这里有太多聪明人,我想有人会知道某种现有的类或函数库已经做到了这一点?

最佳答案

您必须执行以下操作:

  1. 将所有文件移出 webroot。您可以使用 .htaccess 禁用对文件夹的访问,但这不值得麻烦和潜在的安全风险。把它移到那里。
  2. 保留上传文件的表格,其中存储用户的原始文件名。将文件重命名为 $id.$ext 等等。简而言之,您不想在您的系统中使用用户的文件名。
  3. 有一个脚本,download.php 或其他什么,获取文件的 ID,验证谁登录了,如果一切正常,获取文件,将其读出到浏览器,然后发送适当的下载 header 。

这些 header 类似于:

header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=usersuppliedname.txt');
header("Content-Length: " . filesize('../safefiles/1.txt'));
header("Content-Transfer-Encoding: binary");
readfile('../safefiles/1.txt');
exit;

然后您可以 get more fancy如果你想允许恢复文件等,但上面应该做到这一点。

关于php - 在 PHP 中保护文件上传的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872570/

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