如何在PHP中确定Referer?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

什么是最可靠和最安全的方式来确定哪些页面发送或调用(通过AJAX)当前页面。$_SERVER['HTTP_REFERER']由于(缺乏)可靠性,我不想使用这个,我需要调用的页面只来自我的站点发出的请求。

提问于
用户回答回答于

REFERER由客户端浏览器作为HTTP协议的一部分发送,因此确实不可靠。它可能不在那里,它可能是伪造的,如果出于安全原因,你就不能相信它。

如果你想验证请求是否来自您的网站,那么你不能,但是你可以验证用户是否已访问您的网站和/或进行了身份验证。Cookies是通过AJAX请求发送的,因此你可以信赖。

用户回答回答于

我发现最好的是一个CSRF令牌,并将其保存在会话中以查找需要验证引荐来源的链接。

所以如果你正在生成一个FB回调,那么它看起来像这样:

$token = uniqid(mt_rand(), TRUE);
$_SESSION['token'] = $token;
$url = "http://example.com/index.php?token={$token}";

然后index.php将如下所示:

if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
    show_404();
} 

//Continue with the rest of code

我确实知道安全网站的所有安全网页都具有相同的功能。

扫码关注云+社区