當前位置: 首頁> 最新文章列表> 如何通過parse_url 實現跳轉鏈接的來源檢測

如何通過parse_url 實現跳轉鏈接的來源檢測

gitbox 2025-05-20

跳轉來源通常通過HTTP 請求頭的Referer字段傳遞,該字段包含了用戶訪問當前頁面之前所在的頁面URL。例如,當用戶從A 網站點擊鏈接跳轉到B 網站時,B 網站服務器端可以通過$_SERVER['HTTP_REFERER']讀取到A 網站的URL。

不過,需要注意的是:

  • Referer並非一定會發送,有些瀏覽器或插件可能禁用它。

  • Referer有可能被偽造,因此不能完全信任。

二、PHP 的parse_url 函數介紹

parse_url函數可以將URL 分解為組成部分,例如scheme(協議)、host(域名)、path(路徑)等。返回結果是一個關聯數組,便於我們針對URL 的不同部分進行判斷。

 $url = "https://gitbox.net/path/to/page?query=123";
$parsed = parse_url($url);
print_r($parsed);

輸出:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /path/to/page
    [query] => query=123
)

三、實現跳轉來源檢測的示例代碼

以下示例展示如何用PHP 結合parse_url函數檢測跳轉來源,並判斷是否來自指定域名(如gitbox.net ):

 <?php
// 獲取 HTTP_REFERER
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

if (empty($referer)) {
    echo "無來源信息,可能直接訪問或瀏覽器禁用了 Referer。";
    exit;
}

// 解析來源 URL
$parsedUrl = parse_url($referer);

// 判斷是否包含 host
if (!isset($parsedUrl['host'])) {
    echo "來源 URL 格式不正確。";
    exit;
}

// 指定允许的來源域名
$allowedDomains = ['gitbox.net'];

// 判断來源是否在允许列表中
if (in_array($parsedUrl['host'], $allowedDomains)) {
    echo "访问來源于可信域名:" . htmlspecialchars($parsedUrl['host']);
    // 這裡可以做後續邏輯處理,如允許訪問或記錄日誌
} else {
    echo "访问來源不可信,來源域名:" . htmlspecialchars($parsedUrl['host']);
    // 可做跳轉、拒絕訪問等處理
}
?>

四、補充說明

  • 安全性考慮<br> 不能完全依賴Referer來做安全判斷,建議配合其他手段,比如登錄驗證、Token 校驗等

  • 多域名支持
    $allowedDomains數組可以添加多個域名,支持多個可信來源。

  • 性能優化
    parse_url處理簡單,性能開銷低,適合高頻調用。

五、總結

利用PHP 的parse_url函數,可以方便地解析跳轉鏈接的來源URL,實現對跳轉來源的檢測和過濾。結合HTTP 請求頭中的Referer ,開發者能更靈活地管理訪問權限和用戶行為分析。
在實際項目中,還可以根據業務需求對來源進行更細粒度的判斷,提升網站安全和用戶體驗。