-1

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

  $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 中发送的数组:

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

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

4

2 回答 2

2

澄清一下,您的数据已经使用 https:// 加密。有很多方法可以验证您的流量,但一种简单的方法是在您的帖子声明中添加“私钥”。

所以你可以做

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

并在服务器上检查以确保脏数据不会通过

if ($_POST['key'] != 'the key you made')
  die()
于 2017-03-30T16:52:38.263 回答
2

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

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

方法是这样的:

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

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

链接

于 2017-03-30T17:06:16.510 回答