【PHP】防止文章附件被盗链,单文件解决方法 [复制链接]

帖子链接已复制到剪贴板
ximi (UID: 4905) 4月前
帖子已经有人评论啦,不支持删除!

1288 11

根据论坛两位大佬指定,研究 nginx 与 apache 规则限制放盗链;

经测试发现自己虚拟主机 .htaccess 设置 Deny from all无效果,应该是被服务器全局设置覆盖了;

找到以下解决方法分享以一下:

演示链接:

授权后方可下载:https://www.ximi.me/down.php?url=test.zip

此链接拒绝未经授权网站挂载,转载链接自动失效;拒绝直接复制地址到任何第三方工具下载!

www.dalao.net 该域名已设置过授权,可以正常在该页面正常下载,复制地址无效滴!

未授权下载会根据自己设置跳转回原始地址或弹窗警示,例如下面这样!

下面附上代码:

<?php
$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);
//echo $refer;
//echo $host;

if (!in_array($host, $whitelist)) {
  // die('NO'); //
   // 如果不在白名单中,‌执行退出操作

echo '<h2>访问被拒,‌拒绝盗版站点访问哦.</h2>';
echo '<h2><a href="https://www.ximi.me/666.html" target="_blank" alt="">原文地址</a></h2>';
exit; // 测试地址: http://www.ximi.me/down.php?url=test.zip

}

?>

<?php

// 假设通过GET参数传递文件名和验证信息
$fileName = $_GET['url'];
$filePath = "./a/b/d/" . $fileName; //这里是文件存放位置

//echo $fileName;// . $filePath;

// 用户验证逻辑(‌示例省略,‌实际使用时应添加)‌

if (file_exists($filePath)) {

    // 设置HTTP头以准备文件下载
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
//echo $refer . $filePath;
    header('Content-Length: ' . filesize($filePath));
    readfile($filePath);
    exit;
}
else {
die('文件不存在');
exit;

}

?>
米表:3cm.me
已有评论 (11)
提示:您必须 登录 才能查看此内容。
创建新帖
广告推广点击空位自助购买