在 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 带来的风险。