OneManager-php 设置防盗链 - Hello World

OneManager-php 设置防盗链

// ========== 防盗链代码(修复版,不影响主页)==========
// 主域名(用于通配匹配)
$main_domain = '740474.xyz';
// 允许的跨域站点(不同主域的域名)
$allowed_cross_domains = array(
    'demo.volcvideo.com',
    'tcplayer.vcube.tencent.com'
);
// 禁止直接访问
$allow_direct = false;

$request_uri = $_SERVER['REQUEST_URI'] ?? '';

// 【重要】排除主页、目录和预览页面
if ($request_uri === '/' || $request_uri === '' || strpos($request_uri, '?preview') !== false) {
    // 主页、根目录或预览页面直接放行,不进行防盗链检查
} else {
    $ok = false;
    
    // 1. 检查 Origin
    $origin = $_SERVER['HTTP_ORIGIN'] ?? '';
    if (!empty($origin)) {
        $origin_host = parse_url($origin, PHP_URL_HOST);
        
        // 检查是否属于主域名(任何 .740474.xyz 子域名都通过)
        if (strpos($origin_host, '.' . $main_domain) !== false || $origin_host === $main_domain) {
            $ok = true;
        }
        
        // 检查是否在跨域列表中
        if (!$ok && in_array($origin_host, $allowed_cross_domains)) {
            $ok = true;
        }
    }
    
    // 2. 检查 Referer
    if (!$ok) {
        $referer = $_SERVER['HTTP_REFERER'] ?? '';
        if (!empty($referer)) {
            $referer_host = parse_url($referer, PHP_URL_HOST);
            
            // 检查是否属于主域名
            if (strpos($referer_host, '.' . $main_domain) !== false || $referer_host === $main_domain) {
                $ok = true;
            }
            
            // 检查是否在跨域列表中
            if (!$ok && in_array($referer_host, $allowed_cross_domains)) {
                $ok = true;
            }
        }
    }
    
    // 3. 检查 Sec-Fetch-Site
    if (!$ok) {
        $sec_fetch_site = $_SERVER['HTTP_SEC_FETCH_SITE'] ?? '';
        if ($sec_fetch_site === 'same-origin' || $sec_fetch_site === 'same-site') {
            $host = $_SERVER['HTTP_HOST'] ?? '';
            // 当前请求的域名必须属于主域名
            if (strpos($host, '.' . $main_domain) !== false || $host === $main_domain) {
                $ok = true;
            }
        }
    }
    
    // 如果不是允许的来源,返回404并显示警告语
    if (!$ok) {
        header('HTTP/1.1 404 Not Found');
        header('Content-Type: text/plain; charset=utf-8');
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '未知IP';
        die("非法访问已记录IP:{$ip},将上报安全中心");
    }
}
// ========== 防盗链代码结束 ==========

在index.php文件前面加上这些代码 即可实现防盗链

请注意 部署OneManager的域名 无法实现子域名禁止访问 也就是说 用那个域名架设OneManager 其所有的子域名都可以访问 无法实现子域名禁止访问

允许其他站点使用 仅需要在 允许的跨域站点(不同主域的域名)下面 添加新域名即可。