希米日志


主页 代码 笔记 软件 闲谈 留言


18 0


经测试发现自己虚拟主机 .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;
?>

 2024-08-04 17:44:00

二维码



评论:

已有评论:

目 录




1