猿问

保护 PHP 以供其他站点访问

我有一个 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参数来请求数据,我想确保没有人可以访问它。我可以用代码甚至标题做些什么?感谢您的任何帮助


qq_笑_17
浏览 156回答 2
2回答

潇湘沐

一种选择是验证请求中的特定用户数据,例如预先确定的密码或密钥。这是最不安全的方法。另一种选择是只允许来自单一来源的网络连接。您可以通过在每次发出请求时检查客户端的 IP 来做到这一点。如果您采用这条路线,请确保也通过密码进行验证,因为 IP 欺骗是可能的。更安全的方法是获取客户端信息请求的一部分并将其直接发送回客户端,验证他们是否向您发送了此信息(这类似于 2 因素身份验证)。该最安全的方法将具有客户端创建一个加密的签名密钥,然后你可以验证只可能是由他们签名。这可以使用openssl_sign()和openssl_verify()函数来完成。

交互式爱情

为什么不使用可以存储在数据库中的令牌并像 API 一样从标头中读取它呢?您可以只检查标头是否存在并具有令牌值,并根据您的数据库检查令牌是否有效,您可以执行其他一些操作,例如记录请求等,并轻松添加新令牌。如果标头不存在且令牌无效,则删除访问...或者,您可以做一个“ip 白名单”,这样只有来自某些 IP 的请求才能通过,或者像“CORS”这样的域,但仅限于某些 IP 和域。因为这样更容易管理对您服务的某些用户的访问。另一种选择(包括更安全的)就像@shn 所说的。
随时随地看视频慕课网APP
我要回答