我在php中使用curl将数据从本地服务器发布到webhost服务器:
$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服务器上,我接受使用file put contents:
在$ post中发送的数组file_put_contents('incomingData.txt', $_POST["test"]. "\n", FILE_APPEND );
这肯定意味着任何人都可以使用数组密钥发送一个帖子请求到我的虚拟主机服务器'测试'那将被放在我的incomingData.txt文件中?这非常不安全。有没有办法让它只接受我的本地服务器数据,或者我可以以某种方式加密数据?感谢。
答案 0 :(得分:2)
为了澄清,您的数据已使用https://进行加密。有许多方法可以验证您的流量,但一种简单的方法是添加一个"私钥"在你的帖子中。
所以你可以做到
$post = array('key' => 'some private key', 'text' => ... )
在服务器上检查以确保脏数据无法通过
if ($_POST['key'] != 'the key you made')
die()
答案 1 :(得分:2)
要验证您的Curl请求收到的数据,除了对其真实性有合理怀疑外,您还可以使用HMAC系统,这是一个基于哈希的消息验证代码,也是TLS( https )用于验证收到的数据是否与传输中发送的数据相同。
HMAC是一小组数据,可帮助验证消息的性质;它保护了消息的完整性(以及扩展的真实性)。
方法是:
密钥是用于计算HMAC的唯一信息,并且由消息的发送方和接收方都知道,但从不在消息中发送。此密钥的长度会有所不同,具体取决于您使用的算法。有些算法比其他算法更好,有些算法如MD5
不应该使用,因为它们太快且容易研究。