如何授权000webhost的帖子?

How to authorize 000webhost posts?

我在 php 中使用 curl 将 post 数据从我的本地服务器发送到虚拟主机服务器:

  $post = array('test' => 'this is a test' );
    $url = "https://my-app.000webhostapp.com";
            $curlSesh = curl_init();
            curl_setopt($curlSesh, CURLOPT_URL, $url);
            curl_setopt($curlSesh, CURLOPT_POST, true);
            curl_setopt($curlSesh, CURLOPT_POSTFIELDS, $post);
            curl_setopt($curlSesh, CURLOPT_RETURNTRANSFER, true);
            $response = curl_exec($curlSesh);
            curl_close($curlSesh);
            echo "response: ";
            echo $response;
            if ($response == "validate post")echo ' post has been validated';

在我的 000webhost 服务器上,我接受在 $post 中发送的数组,使用文件 put contents:

file_put_contents('incomingData.txt', $_POST["test"]. "\n", FILE_APPEND );

当然,这意味着任何人都可以使用数组键 'test' 向我的虚拟主机服务器发送 post 请求,并将其放入我的 incomingData.txt 文件中?这是非常不安全的。有没有办法让它只接受我的本地服务器数据,或者我可以用某种方式加密数据?谢谢

澄清一下,您的数据已使用 https:// 加密。有多种方法可以验证您的流量,但一种简单的方法是在 post 语句中添加 "private key"。

所以你可以

$post = array('key' => 'some private key', 'text' => ... )

并在服务器上进行检查以确保脏数据未通过

if ($_POST['key'] != 'the key you made')
  die()

要验证您的 Curl 请求收到的数据,排除对其真实性的合理怀疑,您可以使用 HMAC 系统,它是一个基于哈希的消息验证代码,也是TLS (https) 用于验证接收到的数据与传输中发送的数据相同的内容。

HMAC 是一小部分数据,有助于验证消息的性质;它保护消息的完整性(并扩展为真实性)。

方法是这样的:

    1. 将您要发送的数据收集到一个 string/array/object 值中。
    1. 添加密钥
    1. 创建组合数据 + 密钥的 哈希。这是 HMAC
    1. 将数据“payload”和HMAC发送给接收方。
    1. 不要发送密钥。
    1. 接收方然后收集 有效载荷,并添加自己的密钥副本并生成哈希,就像发送方所做的那样。
    1. 如果本地的HMAC与wise发送的HMAC相等,说明发送的payload数据与接收的payload数据相同
    1. 此方法的一大优势在于,与 不同,您的密钥永远不会在它保护的数据(有效负载)中共享或传输。

密钥是用于计算 HMAC 的唯一信息,消息的发送方和接收方都知道但绝不会在消息中发送.根据您使用的算法,此密钥的长度会有所不同。有些算法比其他算法更好,有些算​​法如 MD5 不应该使用,因为它们太快且容易研究。

链接