我有一个PHP页面,只有其他站点可以访问该站点进行轮询(有点像Webhook)。我不希望任何用户尝试访问/访问它。我如何确保可以通过特定的来源/方式访问它?
例如:
当网站在我的网站上检查新数据时,他们将访问一个名为check.php
的页面。他们将发送POST
和GET
信息进行检查。这是该页面的示例代码:
<?php
if(empty($_GET['name']) || empty($_GET['email']) || $_POST['secret-code'] !== 'abc123') {
echo "error";
exit();
} else {
$name = $_GET['name'];
$email = $_GET['email'];
echo 'Here is the info you requested...';
}
?>
我该如何确保更多呢?如果要发送自己的$_GET
和$_POST
参数来请求数据,我想确保没有人可以访问它。我可以用代码甚至头做任何事情吗?谢谢您的帮助
答案 0 :(得分:1)
一种选择是从请求中验证特定的用户数据,例如预定的密码或密钥。这是最不安全的方法。
另一个选择是仅允许来自单一来源的网络连接。您可以通过在客户端每次发出请求时检查客户端的IP来执行此操作。 如果您采用这种方法,则也可以通过密码进行验证,因为可以进行IP欺骗。
一种更安全的方法是接受一部分客户信息请求,然后将其发送回客户,确认他们已向您发送了此信息(这就像两因素身份验证一样。)
最安全的方法是让客户端创建一个加密签名的密钥,然后您可以验证该密钥只能由他们签名。
这可以使用openssl_sign()和openssl_verify()函数来完成。
答案 1 :(得分:1)
为什么不仅仅使用可以存储在数据库中的令牌并像API一样从标头中读取令牌呢?
您只需检查标头是否存在并具有令牌值,并对照您的数据库检查令牌是否有效,就可以执行其他操作,例如记录请求和类似内容,并轻松添加新令牌。
如果标头不存在且令牌无效,则删除访问权限...
或者,您可以执行“ ip白名单”,以便仅某些IP的请求可以通过,也可以传递诸如“ CORS”之类的域,但仅限于某些IP和域。
因为这样可以更轻松地管理对您服务中某些用户的访问。另一个选择(包括更安全的选择)就像@shn所说。