安全的PHP可以被其他站点访问

时间:2019-06-18 22:21:42

标签: php post get http-headers polling

我有一个PHP页面,只有其他站点可以访问该站点进行轮询(有点像Webhook)。我不希望任何用户尝试访问/访问它。我如何确保可以通过特定的来源/方式访问它?

例如:

当网站在我的网站上检查新数据时,他们将访问一个名为check.php的页面。他们将发送POSTGET信息进行检查。这是该页面的示例代码:

<?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参数来请求数据,我想确保没有人可以访问它。我可以用代码甚至头做任何事情吗?谢谢您的帮助

2 个答案:

答案 0 :(得分:1)

一种选择是从请求中验证特定的用户数据,例如预定的密码或密钥。这是最不安全的方法。

另一个选择是仅允许来自单一来源的网络连接。您可以通过在客户端每次发出请求时检查客户端的IP来执行此操作。 如果您采用这种方法,则也可以通过密码进行验证,因为可以进行IP欺骗。

一种更安全的方法是接受一部分客户信息请求,然后将其发送回客户,确认他们已向您发送了此信息(这就像两因素身份验证一样。)


最安全的方法是让客户端创建一个加密签名的密钥,然后您可以验证该密钥只能由他们签名。

这可以使用openssl_sign()openssl_verify()函数来完成。

答案 1 :(得分:1)

为什么不仅仅使用可以存储在数据库中的令牌并像API一样从标头中读取令牌呢?

您只需检查标头是否存在并具有令牌值,并对照您的数据库检查令牌是否有效,就可以执行其他操作,例如记录请求和类似内容,并轻松添加新令牌。

如果标头不存在且令牌无效,则删除访问权限...

或者,您可以执行“ ip白名单”,以便仅某些IP的请求可以通过,也可以传递诸如“ CORS”之类的域,但仅限于某些IP和域。

因为这样可以更轻松地管理对您服务中某些用户的访问。另一个选择(包括更安全的选择)就像@shn所说。