什么是最可靠和最安全的方法来确定当前页面发送或调用(通过AJAX)的页面.我不想使用$_SERVER['HTTP_REFERER']
,因为(缺乏)可靠性,我需要调用的页面仅来自源自我网站的请求.
编辑:我希望验证从我的网站上的页面调用预先形成一系列操作的脚本.
REFERER由客户端的浏览器作为HTTP协议的一部分发送,因此确实不可靠.它可能不存在,它可能是伪造的,如果是出于安全原因,你就是不能相信它.
如果您想验证某个请求是否来自您的网站,那么您不能,但您可以验证该用户是否已访问过您的网站和/或已通过身份验证.Cookie是在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
我知道安全网站可以为所有安全页面提供相同的功能.
使用$ _SERVER ['HTTP_REFERER']
将用户代理引用到当前页面的页面地址(如果有).这是由用户代理设置的.并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能.简而言之,它无法真正被信任.
if (!empty($_SERVER['HTTP_REFERER'])) { header("Location: " . $_SERVER['HTTP_REFERER']); } else { header("Location: index.php"); } exit;