Как авторизовать сообщения 000webhost?

Я использую curl в php для отправки данных с моего локального сервера на сервер веб-хостинга:

  $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:

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

Конечно, это означает, что любой может отправить почтовый запрос на мой сервер веб-хостинга с ключом массива «тест», и он будет помещен в мой файл incomingData.txt? Это крайне небезопасно. Есть ли способ сделать так, чтобы принимались только данные моего локального сервера, или, может быть, я могу каким-то образом зашифровать данные? Спасибо.


person Ethan SK    schedule 30.03.2017    source источник
comment
https является шифрованием. Мое предложение, прочитайте о защите CSRF.   -  person Madbreaks    schedule 30.03.2017
comment
вам также может быть интересно прочитать это о 000webhosts   -  person Martin    schedule 30.03.2017


Ответы (2)


Чтобы уточнить, ваши данные уже зашифрованы с помощью https://. Существует множество способов аутентификации вашего трафика, но самым простым способом было бы добавить «закрытый ключ» в ваше сообщение о публикации.

Так что вы могли бы сделать

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

И на сервере проверьте, чтобы грязные данные не проходили

if ($_POST['key'] != 'the key you made')
  die()
person mconkin    schedule 30.03.2017
comment
Ах! У меня были подозрения, что так оно и было. Спасибо! - person Ethan SK; 30.03.2017
comment
@EthanSK, возможно, стоит отметить, что этот ответ представляет значительный риск того, что если данные будут скомпрометированы, секретный ключ будет скомпрометирован, и поэтому все предыдущие сообщения будут скомпрометированы. - person Martin; 30.03.2017
comment
Да, но, конечно, это очень сложно, поскольку все данные отправляются с использованием защищенного https? - person Ethan SK; 30.03.2017
comment
Верно, но ответ @Martin гораздо более приемлем для профессионального кода. - person mconkin; 30.03.2017

Для аутентификации ваших данных, полученных по вашему запросу Curl, вне всяких разумных сомнений в их подлинности, вы можете использовать систему HMAC, которая представляет собой код аутентификации сообщений на основе хэша, а также протокол TLS (https< /em>) используется для проверки того, что полученные данные совпадают с данными, отправленными при передаче.

HMAC — это небольшой набор данных, который помогает аутентифицировать характер сообщения; он защищает целостность (и, соответственно, подлинность) сообщения.

Метод таков:

    1. Collect your data you are sending into a single string/array/object value.
    1. Add a secret key
    1. Create a Hash of the combined data + secret key. This is the HMAC
    1. Send the data "payload" and the HMAC to the receiver.
    1. Do NOT send the secret key.
    1. Receiver then collects the Payload, and adds its own copy of the secret key and generates a hash, as the sender did.
    1. If the local HMAC is equal to the HMAC sent over the wise, this shows that the payload data sent is the same as the payload data received.
    1. A BIG advantage to this method is that unlike ma11ocs answer your secret key is never shared or transported in the data (payload) it is protecting.

Секретный ключ — это уникальная часть информации, которая используется для вычисления HMAC и известна как отправителю, так и получателю сообщения, но никогда не отправляется в сообщении. Длина этого ключа зависит от используемого алгоритма. Некоторые алгоритмы лучше других, некоторые, такие как MD5, не следует использовать, поскольку они слишком быстрые и их легко исследовать.

Ссылки

person Martin    schedule 30.03.2017
comment
разве я не могу просто создать свой собственный алгоритм, который добавляет 5 и умножает, например, на 29, а затем отправляет это число с помощью curl, а затем на другом сервере он делает противоположное моему алгоритму для его расшифровки? Конечно, если бы я сделал что-то подобное или немного более сложное, никто бы не догадался, потому что они не знают, что они вообще ищут (например, случайный пароль)? - person Ethan SK; 30.03.2017
comment
@EthanSK, вы просто отправляете числовые значения? То, что вы описываете, очень широко говорит о той же системе, что и я. +5 * 29 – это секретный ключ, поскольку он используется для создания и последующего декодирования данных без отправки в данных. - person Martin; 30.03.2017
comment
@EthanSK Закон Шнайера: любой, от самого невежественного любителя лучшему криптографу, может создать алгоритм, который он сам не сможет взломать. - person zaph; 30.03.2017
comment
@Martin, хорошо, да, если бы я отправил числовое значение в качестве своего рода пароля, то не было бы проще использовать мой собственный алгоритм, а не реализовывать какой-то сложный предварительно созданный алгоритм? - person Ethan SK; 30.03.2017
comment
@EthanSK Нет (ну да, если вы хотите рискнуть быть легко взломанным и злоупотребляемым другими, что я сомневаюсь, что вы делаете, иначе вам было бы все равно, что это на TLS...) - person Martin; 30.03.2017
comment
@EthanSK Никогда не используйте самодельный алгоритм, когда речь идет о безопасности и криптографии. Это правило буквально имеет 0 исключений. - person Luke Joshua Park; 30.03.2017