【发布时间】:2022-01-03 21:47:59
【问题描述】:
我有一个文章申请网站。
我需要拒绝对这些文件的所有直接访问,但允许在某些页面上进行下载。这些文件是 .pdf
文件的位置是: "./public_html/files"
有没有办法拒绝所有对这些文件的直接访问,但允许从特定按钮下载?
【问题讨论】:
我有一个文章申请网站。
我需要拒绝对这些文件的所有直接访问,但允许在某些页面上进行下载。这些文件是 .pdf
文件的位置是: "./public_html/files"
有没有办法拒绝所有对这些文件的直接访问,但允许从特定按钮下载?
【问题讨论】:
您必须在文件系统之上实现一个包装器,并为此目的添加额外的安全性,例如令牌。
假设你的下载路径是:
<BASE_URL>/download/{x}
而x 是文件名。如果用户在 url 中提供了有效的令牌,则此路由只会返回来自 ./public_html/files 的文件内容,例如:
<BASE_URL>/download/{x}?token=diji12jidj
此方法的所有实现都取决于您的需求,例如令牌可以基于用户会话或基于时间或...
这里有一个简单的php提示:
// First page
session_start();
$_SESSION['download_key'] = random_string() // a function that you can implement in anyway you want
// In you html
<a href="download.php?name=<FILE_NAME>&download_key=<?= $_SESSION['download_key'] ?>">Download here</a>
// File: download.php
if(isset($_SESSION['download_key']) && $_REQUEST['download_key'] == $_SESSION['download_key']) {
// find file
$path = ... // path to file
$fp = fopen($path, 'rb');
// send the right headers
header("Content-Type: image/png"); // or anything else
header("Content-Length: " . filesize($path));
fpassthru($fp);
exit;
}
【讨论】: