如何用PHP获取referer判断来路防止非法访问

如何用PHP获取referer判断来路防止非法访问

介绍

referer(引荐人)是HTTP协议的一部分,它用于表示用户是从哪个网页链接过来访问当前页面的。利用referer信息,我们可以判断用户的访问来源,以此来防止非法访问。本篇文章将介绍如何利用PHP来获取referer信息,并进行判断,实现来路防护的功能。

PHP中获取referer信息

在PHP中,我们可以通过$_SERVER['HTTP_REFERER']来获取referer信息。这个信息是由用户客户端(浏览器)自动发送给服务器的,它记录了用户从哪个网页链接过来访问当前页面。

以下是一个获取referer信息的示例:

$referer = $_SERVER['HTTP_REFERER'];

我们可以通过var_dump($referer)来查看referer信息的具体内容:

var_dump($referer);

运行上述代码后,我们可以在浏览器中访问一个PHP页面,然后查看输出结果。例如,我们在浏览器中输入以下网址并访问:

http://localhost/mypage.php

输出结果应该类似于:

string(23) "http://www.example.com"

这表明referer信息为"http://www.example.com",也就是用户是从"http://www.example.com"的链接过来访问当前页面的。

注意事项

需要注意的是,referer信息是由浏览器发送给服务器的,而且它可以被用户手动修改。因此,我们在编写来路判断逻辑时,要考虑到这些因素,以确保来路防护的准确性。

来路判断与防护

根据获取到的referer信息,我们可以进行来路判断,以防止非法访问。以下是一种简单的来路判断逻辑:

// 允许访问的合法来源

$allowedReferer = 'http://www.example.com';

// 获取referer信息

$referer = $_SERVER['HTTP_REFERER'];

// 判断referer是否为空,并检查其是否以$allowedReferer开头

if (!empty($referer) && strpos($referer, $allowedReferer) === 0) {

// 正常访问

} else {

// 非法访问,进行相应处理

}

上述逻辑首先定义了一个合法的referer来源,即允许访问的网站链接。然后,通过strpos()函数比较referer是否以允许的referer开头。如果是,则表示来路合法,执行正常访问的逻辑;如果不是,则表示来路非法,可以进行相应处理(例如:跳转到其他页面、输出错误信息等)。

需要注意的是,我们在实际应用中可以根据需求来设置合法的referer来源,可以是单个链接,也可以是一个允许的网站域名列表。

referer为空的情况

有时候,referer信息会为空。这可能是因为用户直接在浏览器地址栏中输入网址,或者使用一些浏览器插件禁用了referer的发送。为了应对这种情况,我们可以将空referer视为非法访问,并进行相应处理。

// 获取referer信息

$referer = $_SERVER['HTTP_REFERER'];

// 判断referer是否为空,并检查其是否以$allowedReferer开头

if (empty($referer) || strpos($referer, $allowedReferer) !== 0) {

// 非法访问,进行相应处理

}

通过将空referer视为非法访问,可以增强来路防护的准确性。

referer安全性

如前文所述,referer信息是由浏览器发送的,是可被用户手动修改的。因此,在进行来路判断时,referer并不是100%可信的。潜在攻击者可以修改referer信息,以绕过来路判断。因此,在使用referer进行来路判断时,我们需要保持一定的警惕性,并考虑其他的防护措施。

总结

通过PHP获取referer信息,可以判断用户的访问来源,以此来实现来路防护的功能。在编写来路判断逻辑时,我们需要考虑referer的可信性和安全性,以确保来路判断的准确性和有效性。

以上就是利用PHP获取referer信息并进行来路判断的方法。希望本文对你有所帮助!

后端开发标签