当前位置: 首页> 最新文章列表> 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['set']; // 页面上显示 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['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'] 来判断来源虽然简单,但并不安全。在对安全性要求较高的场景中,建议通过 SessionAjax 来验证请求来源,从而避免伪造 Referer 带来的风险。