经测试发现自己虚拟主机 .htaccess 设置 Deny from all 无效果,应该是被服务器全局设置覆盖了;
找到以下解决方法分享以一下:
演示链接:
示例下载:https://www.ximi.me/down.php?url=test.zip
https://www.ximi.me/a.php?url=test.zip
此链接拒绝未经授权网站挂载,转载链接自动失效;拒绝直接复制地址到任何第三方工具下载!
域名设置过授权才正常下载,复制地址无效,如果自己需授权转载可以将对应域名加入白名单!
未授权下载会根据自己设置跳转回原始地址或弹窗警示,例如下面这样!
下面附上代码:
<?php
// 设置错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 引用检查
$refer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$whitelist = ['ximi.me', 'www.ximi.me', 'dalao.net', 'www.dalao.net'];
$host = parse_url($refer, PHP_URL_HOST);
if (!in_array($host, $whitelist)) {
header("HTTP/1.0 403 Forbidden");
echo '<h2>访问被拒,拒绝盗版站点访问。</h2>';
echo '<h2><a href="https://www.ximi.me/666.html" target="_blank">原文地址</a></h2>';
exit;
}
// 文件下载处理
$fileName = isset($_GET['url']) ? $_GET['url'] : '';
if (empty($fileName)) {
header("HTTP/1.0 400 Bad Request");
die('未指定文件名');
}
// 安全地构建文件路径
$baseDir = realpath("./a/b/d");
$filePath = $baseDir . DIRECTORY_SEPARATOR . basename($fileName);
// 检查文件是否在允许的目录中
if (strpos(realpath($filePath), $baseDir) !== 0) {
header("HTTP/1.0 403 Forbidden");
die('访问被拒绝');
}
if (!file_exists($filePath) || !is_file($filePath)) {
header("HTTP/1.0 404 Not Found");
die('文件不存在');
}
// 获取文件MIME类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $filePath);
finfo_close($finfo);
// 设置适当的头部
header('Content-Type: ' . $mimeType);
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . filesize($filePath));
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
// 禁用输出缓冲
if (ob_get_level()) ob_end_clean();
// 以二进制模式读取文件并输出
if ($handle = fopen($filePath, 'rb')) {
while (!feof($handle) && (connection_status() == 0)) {
print(fread($handle, 8192));
flush();
}
fclose($handle);
}
exit;
?>
已有评论: