當前位置: 首頁> 最新文章列表> PHP 獲取Referer 的方法與安全實現

PHP 獲取Referer 的方法與安全實現

M66 2025-10-05

PHP 中的Referer 介紹

在Web 開發中,Referer 是HTTP 請求頭的一部分,用於標識請求的來源頁面。通過獲取Referer,可以實現防盜鏈、用戶來源統計等功能。不過,需要注意的是,HTTP_REFERER 本身容易被偽造,因此在安全性要求較高的情況下並不完全可靠。

使用Session 來驗證請求來源

由於HTTP_REFERER 可能會被篡改,更安全的做法是結合SessionCookie來判斷請求是否來源於指定的頁面。下面通過示例代碼進行演示。

userrequest.php 示例

<!DOCTYPE html>
<html>
<body>
<form action="determineuser.php" method="post" align="center">
    <input type="submit" name="click" value="Determine user request through session"/>
</form>
<?php
session_start(); // 開啟 Session
$setsession = uniqid(mt_rand(), TRUE); // 生成唯一標識
$_SESSION['set'] = $setsession;
$redirect = "determineuser.php?set={$setsession}"; // 可傳遞 Session 標識

echo "<h1 align='center'> ";
echo "Your current session is:".$_SESSION[&#39;set&#39;]; // 頁面上顯示Session

echo "</h1> ";
?>
</body>
</html>

determineuser.php 示例

<?php
session_start(); // 檢查 Session 和表單提交
if ( (isset($_SESSION['set']) && $_SESSION['set'] === TRUE) || isset($_POST['click']) ) {
    echo "Determined Last visited page on the server using HTTP REFERER:<br> ".$_SERVER[&#39;HTTP_REFERER&#39;];
    echo "<h1 align='center'> ";
    echo "<p> This is the secure way to determine referer using session:</p> ";
    echo $_SESSION[&#39;set&#39;]; // 驗證Session 是否匹配echo "</h1> ";
} else {
    // 如果無法確定來源,則重定向到userrequest.php
    header(&#39;Location:userrequest.php&#39;);
    exit;
}
?>

總結

直接使用$_SERVER['HTTP_REFERER']來判斷來源雖然簡單,但並不安全。在對安全性要求較高的場景中,建議通過SessionAjax來驗證請求來源,從而避免偽造Referer 帶來的風險。