在Web 開發中,Referer 是HTTP 請求頭的一部分,用於標識請求的來源頁面。通過獲取Referer,可以實現防盜鏈、用戶來源統計等功能。不過,需要注意的是,HTTP_REFERER 本身容易被偽造,因此在安全性要求較高的情況下並不完全可靠。
由於HTTP_REFERER 可能會被篡改,更安全的做法是結合Session或Cookie來判斷請求是否來源於指定的頁面。下面通過示例代碼進行演示。
<!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['set']; // 頁面上顯示Session echo "</h1> "; ?> </body> </html>
<?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['HTTP_REFERER']; echo "<h1 align='center'> "; echo "<p> This is the secure way to determine referer using session:</p> "; echo $_SESSION['set']; // 驗證Session 是否匹配echo "</h1> "; } else { // 如果無法確定來源,則重定向到userrequest.php header('Location:userrequest.php'); exit; } ?>
直接使用$_SERVER['HTTP_REFERER']來判斷來源雖然簡單,但並不安全。在對安全性要求較高的場景中,建議通過Session或Ajax來驗證請求來源,從而避免偽造Referer 帶來的風險。