PHP - cURL: как безопасно отправлять данные на другой сервер, используя cURL - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь отправить некоторые данные с сервера (A) на сервер (B) через cURL, а затем помещаю эти данные в базу данных или удаляю из них, в зависимости от случая. Дело в том, что я хочу защитить его и быть уверенным, что не каждый может поместить в базу данных все, что захочет, путем доступа к серверу (B). Итак, я добавил хеш с другими данными:

<?php
    $url = "https://serverB/test.php";
    $hash = hash('sha512','UPbztBfJEY7FjDjUZ7kd');//Don't mind the sha512 instead of bcrypt, both my servers aren't working with bcrypt.

    $fields = array(
        'ref' => 'toasty',
        'name' => 'toasta'
        'hash'=> $hash
    );

    $fields_string = http_build_query($fields);

    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    curl_exec($ch);
?>

И затем мы проверим это на другом сервере:

<?php
    $hash=(array_key_exists('hash',$_POST))?$_POST['hash']:'';
    if($hash==hash('sha512','UPbztBfJEY7FjDjUZ7kd')){
        //Insert the data into the database
    }
?>

Но действительно ли это безопасно? Если кто-то может прочитать то, что я отправляю, даже если $hash хорошо хеширован, он действительно может просто отправить все, что захочет, просто набрав хешированный пароль, поскольку проверка будет работать.

этого достаточно? Как я могу сделать лучше?

Не стесняйтесь спрашивать меня о дополнительной информации, которую я бы пропустил, спасибо!

1 Ответ

1 голос
/ 05 ноября 2019

Вам необходимо хешировать данные, чтобы убедиться, что они не были изменены при передаче, и вы можете использовать свой секретный ключ, чтобы убедиться, что только авторизованные стороны могут генерировать действительный хеш. Таким образом, ваш отправляющий код может выглядеть следующим образом.

  $yourSecretKey = 'UPbztBfJEY7FjDjUZ7kd';
  $fields = array(
      'ref' => 'toasty',
      'name' => 'toasta'
       );
  $hash = hash('sha512', $yourSecretKey . serialize($fields));

  $fields['hash'] = $hash;

И на принимающей стороне вам нужно извлечь хеш из данных, использовать секретный ключ, чтобы хэшировать другие поля данных и сверять сгенерированный хеш с вашимизвлеченный хеш.

foreach ($_POST as $key => $value) {
    if ($key === 'hash') {     // Checksum value is separate from all other fields and shouldn't be included in the hash
        $checksum = $value;
    } else {
        $input[$key] = $value;
    }
}

$hash = hash('sha512', $yourSecretKey . serialize($input));
if ($hash === $checksum) {
    $valid = true;
} else {
    $valid = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...