Php 有可能用这些方法保护API吗?
到目前为止,我试着做一些类似的事情:Php 有可能用这些方法保护API吗?,php,ajax,api,cross-domain,Php,Ajax,Api,Cross Domain,到目前为止,我试着做一些类似的事情: 检查用户的IP地址和主机 如果两者都匹配允许的主机和IP,则允许访问 如果否,则显示错误 我正在构建API,到目前为止,所有请求都只来自我的主机。问题是: 如何允许仅当这些请求来自本地主机时才执行它们(只有少数几个请求应该由指定的主机执行,其余的方法应该对公众可用) 如何防止人们欺骗referer和x-forwarded 有可能吗 以下是一些代码: 设置访问原始标题 检查请求来源 除了一件事之外,一切都可能是完美的:我正在运行CloudFlare,显然我不能
那么,这个问题有什么可能的解决方案吗?Cloudflare发送了几个变量 $\u服务器[“HTTP\u CF\u CONNECTING\u IP”]提供客户端(访问者)IP地址 $\u服务器[“HTTP\u CF\u IPCOUNTRY”]提供访问国家/地区 $\u服务器[“HTTP\u CF\u访问者”]显示用于连接的方案-HTTP或HTTPS $\u SERVER[“HTTP\u CF\u-RAY”]传递CF-RAY头,其中包含一个附加了请求通过的数据中心的哈希 您还可以使用$_SERVER['HTTP_X_FORWARDED_FOR']这是一个由代理(包括CloudFlare)使用的完善的HTTP头,用于在请求中传递其他IP地址
更多如果您将一些令牌与您的请求一起传递,以识别此类host@siddhesh是的,已经在用了,但问题是,人们仍然可以复制令牌并使用它来绕过所谓的“安全性”。您可以在特定时间后创建基于时间的令牌。令牌将更改,例如15分钟或1天。这不是100%的解决方案,但会减少黑客攻击。如果有人静止令牌,它将在一段时间后无效。无论如何,您所说的“同一系统中的本地主机”是什么意思居住
if(isset($_SERVER['HTTP_REFERER'])) {
$refererProtocol = str_replace(':', '', substr($_SERVER['HTTP_REFERER'], 0, strpos($_SERVER['HTTP_REFERER'], "/")));
$refererHost = str_replace($refererProtocol . '://', '', $_SERVER['HTTP_REFERER']);
$ACAO = $refererProtocol . '://' . substr($refererHost, 0, strpos($refererHost, "/"));
$this->accessControl = [
'allow_origin' => $ACAO,
'from_referer' => true
];
header("Access-Control-Allow-Origin: " . $ACAO);
} else {
$this->accessControl = [
'allow_origin' => 'https://' . $_SERVER['HTTP_HOST'],
'from_referer' => false
];
header("Access-Control-Allow-Origin: " . 'https://' . $_SERVER['HTTP_HOST']);
}
$localHost = 'https://' . $_SERVER['SERVER_NAME'];
if ($this->accessControl['allow_origin'] === $localHost || $this->accessControl['allow_origin'] === $this->Settings['allow_host']) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$this->JSON->apiError(403, 'You are not allowed to execute this method', ['MyAPI', 'onlyLocalHost']);
return false;
} else {
if ($this->Settings['allow_ip'] === $_SERVER['REMOTE_ADDR']) {
return true;
} else {
$this->JSON->apiError(403, 'You are not allowed to execute this method', ['MyAPI', 'onlyLocalHost']);
return false;
}
}
} else {
$this->JSON->apiError(403, 'You are not allowed to execute this method', ['MyAPI', 'onlyLocalHost']);
return false;
}