gpt4 book ai didi

php - PHP 中受密码保护的目录和文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:00 24 4
gpt4 key购买 nike

我正在创建一个简单的私有(private)页面,其中包含一些要下载的文件的链接。我已经通过简单的 session 管理完成了它,但我遇到了一个问题:如果有人单击文件 url,他可以在没有身份验证的情况下下载文件。那么我能做些什么来避免这种情况呢?我可以进行 HTTP 身份验证,但我想要自定义登录表单而不是弹出窗口。

有什么想法吗?

谢谢

最佳答案

我想现在回答有点晚了。无论如何,它可能会帮助其他人。

要保护文件不被直接下载,您必须结合使用 PHP + .htaccess。

让我们承认 ./downloads/是您存储要下载的文件的文件夹。首先,您已将 .htaccess 放入此文件夹中。

.htaccess 在 ./downloads/中:

deny from all

这将为每个人保护文件夹,除了在服务器端执行的脚本。


这是您可以在根目录中编写的 PHP 脚本示例。/

./中的 index.php:

<?php
if(!empty($_GET["filename"]))
{
//Here is the path to the folder containing files to download
$my_download_folder = "./downloads/";

//Preparing headers
header("Content-type: application/force-download");
//You can use more headers :
//header("Content-Length: ".filesize($my_download_folder . $_GET["filename"]));
//header("Content-Disposition: attachment; filename=".basename($my_download_folder . $_GET["filename"]));

//You can check if the file does exist
//if (!file_exists($my_download_folder . $_GET["filename"]))
//exit();

//Reading file will trigger download on the browser side
readfile($my_download_folder . $_GET["filename"]);
}
?>

<html>
<form action="" method="GET">
<input type="text" name="filename" id="filename" />
<input type="submit" value="Download It !" />
</form>
</html>

这个脚本可以直接使用。不过要小心。实际上存在一个重大漏洞:使用此表单,您可以下载服务器的任何文件(包括像 config.php 这样包含对数据库的访问权限的文件)。要修复该漏洞,您可以使用 ID:

if ($_GET["id"] == 1)
$filename = "toto.pdf"
if ($_GET["id"] == 2)
$filename = "fish.png"



它提供了一个保护文件不被直接下载但不被 PHP 下载的好例子。

关于php - PHP 中受密码保护的目录和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3166792/

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