安全 PHP 以供其他站点访问
Secure PHP to be accessed by other site
我有一个 PHP 页面,只有其他站点可以访问该页面以进行轮询(有点像网络钩子)。我不希望任何用户尝试 access/visit 它。我怎样才能确保特定的 source/way 可以访问它?
例如:
当网站检查我网站上的新数据时,他们将访问名为 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
参数来请求数据,我想确保没有人可以访问它。我可以用代码甚至 headers 做什么?感谢您的帮助
一种选择是验证请求中的特定用户数据,例如预先确定的密码或密钥。这是最不安全的方法。
另一种选择是只允许来自单一来源的网络连接。您可以通过在每次发出请求时检查客户端的 IP 来做到这一点。 如果您选择此路线,请确保也通过密码进行验证,因为 IP 欺骗是可能的。
一种更安全的方法是获取部分客户信息请求并将其直接发送回客户,验证他们是否向您发送了此信息(这类似于 2 因素身份验证)。
最安全的方法是让客户端创建一个加密签名的密钥,然后您可以验证该密钥只能由他们签名。
这可以使用 openssl_sign() and openssl_verify() 函数来完成。
为什么不使用可以存储在数据库中的令牌并像 API 一样从 header 中读取它呢?
您可以只检查 header 是否存在并具有令牌值,并根据您的数据库检查令牌是否有效,您可以做一些其他事情,例如记录请求和类似的东西并添加新的代币很容易。
如果 header 不存在且令牌无效,则删除访问权限...
或者,您可以执行 "ip whitelist",这样只有来自某些 IP 的请求才能通过或像 "CORS" 这样的域,但仅限于某些 IP 和域。
因为这样可以更轻松地管理对您服务的某些用户的访问。另一个选项(包括更安全的)就像@shn 说的那样。
我有一个 PHP 页面,只有其他站点可以访问该页面以进行轮询(有点像网络钩子)。我不希望任何用户尝试 access/visit 它。我怎样才能确保特定的 source/way 可以访问它?
例如:
当网站检查我网站上的新数据时,他们将访问名为 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
参数来请求数据,我想确保没有人可以访问它。我可以用代码甚至 headers 做什么?感谢您的帮助
一种选择是验证请求中的特定用户数据,例如预先确定的密码或密钥。这是最不安全的方法。
另一种选择是只允许来自单一来源的网络连接。您可以通过在每次发出请求时检查客户端的 IP 来做到这一点。 如果您选择此路线,请确保也通过密码进行验证,因为 IP 欺骗是可能的。
一种更安全的方法是获取部分客户信息请求并将其直接发送回客户,验证他们是否向您发送了此信息(这类似于 2 因素身份验证)。
最安全的方法是让客户端创建一个加密签名的密钥,然后您可以验证该密钥只能由他们签名。
这可以使用 openssl_sign() and openssl_verify() 函数来完成。
为什么不使用可以存储在数据库中的令牌并像 API 一样从 header 中读取它呢?
您可以只检查 header 是否存在并具有令牌值,并根据您的数据库检查令牌是否有效,您可以做一些其他事情,例如记录请求和类似的东西并添加新的代币很容易。
如果 header 不存在且令牌无效,则删除访问权限...
或者,您可以执行 "ip whitelist",这样只有来自某些 IP 的请求才能通过或像 "CORS" 这样的域,但仅限于某些 IP 和域。
因为这样可以更轻松地管理对您服务的某些用户的访问。另一个选项(包括更安全的)就像@shn 说的那样。