Передача веб-данных и API

#php #api #curl

Вопрос:

Я изучаю программирование, передачу данных через Интернет и API. Я создал простую модель передачи данных между двумя веб-сайтами. У меня есть три основных вопроса о нижеприведенном процессе. При просмотре предположим, что оба веб-сайта настроены с использованием протокола TLS.

  1. Будет ли приведенный ниже простой процесс хорошей безопасной архитектурой для передачи данных между двумя веб-сайтами?
  2. Будет ли этот простой пример называться API?
  3. В этом примере как может быть реализована дополнительная безопасность (т. е. Ключ API и т. Д.)?

Веб-сайт 1 — Простая веб-форма для сбора и отправки данных:

 <!DOCTYPE HTML>  
<html>
<head>
</head>
<body>  

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);

}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

<h2>PHP Form Validation Example</h2>
<form method="post" action="include/redirect.php">  
  Name: <input type="text" name="name">
  <br><br>
  E-mail: <input type="text" name="email">
  <br><br>
  Website: <input type="text" name="website">
  <br><br>
  Comment: <textarea name="comment" rows="5" cols="40"></textarea>
  <br><br>
  Gender:
  <input type="radio" name="gender" value="female">Female
  <input type="radio" name="gender" value="male">Male
  <input type="radio" name="gender" value="other">Other
  <br><br>
  <input type="submit" name="submit" value="Submit">  
</form>
</body>
</html>
 

Веб-сайт 1 Включает файл, который запускается при отправке формы:

 <?php


if (isset($_POST['name']) amp;amp; $_POST['name']!="") {
    $name = $_POST['name'];
    $url = "https://localhost/api/api/".$name;

    $client = curl_init($url);
    curl_setopt($client,CURLOPT_RETURNTRANSFER,true);
    $response = curl_exec($client);
    
    $result = json_decode($response);
    
    echo "<table>";
    echo "<tr><td>Name:</td><td>$result->name</td></tr>";
    echo "<tr><td>Amount:</td><td>$result->amount</td></tr>";
    echo "<tr><td>Response Code:</td><td>$result->response_code</td></tr>";
    echo "<tr><td>Response Desc:</td><td>$result->response_desc</td></tr>";
    echo "</table>";

}
?>
 

Веб-сайт 2 — Вызывается в файле включения: https://localhost/api/api/».$имя;. Веб-сайт 2 получает данные, присваивает им определенную сумму и возвращает данные.

 <?php
header("Content-Type:application/json");
if (isset($_GET['name']) amp;amp; $_GET['name']!="") {
    $name = $_GET['name'];
}
else {
    response(NULL, NULL, 400,"Can't process options now, visit local dealer");
}

if($name=="Joe"){
    
    $amount = "700";
    $response_code = "Good";
    $response_desc = "Good";
    response($name, $amount, $response_code,$response_desc);
}
else {
        
    response(NULL, NULL, 200,"Can't process options now, visit local dealer");
  
}


function response($name,$amount,$response_code,$response_desc){
    $response['name'] = $name;
    $response['amount'] = $amount;
    $response['response_code'] = $response_code;
    $response['response_desc'] = $response_desc;
    
    $json_response = json_encode($response);
    echo $json_response;
}
?>
 

Ответ №1:

Будет ли приведенный ниже простой процесс хорошей безопасной архитектурой для передачи данных между двумя веб-сайтами?

Да, это может сработать. Если вы просто хотите, чтобы два веб-сервера взаимодействовали друг с другом, я бы рекомендовал ограничить доступ к сценарию через файл .htaccess или брандмауэр, чтобы он не был общедоступным.

Конечно, везде, где это возможно, вызов методов через PHP вместо отправки HTTP-запросов между сценариями является более безопасным, быстрым и лучшим практически в любом случае.

Будет ли этот простой пример называться API?

Интерфейс прикладного программирования (API) — это соединение между компьютерами или между компьютерными программами. Это тип программного интерфейса, предлагающий услуги другим компонентам программного обеспечения. Из Википедии: API

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

В этом примере как может быть реализована дополнительная безопасность (т. е. Ключ API и т. Д.)?

Как я уже упоминал ранее, в зависимости от ваших требований вы можете ограничить доступ к конечной точке API, используемой для связи между серверами («https://localhost/api/api» в этом случае), чтобы предотвратить его использование кем-либо, кроме вашего сервера (используйте файл .htaccess или проверьте IP-адрес в коде)

Кроме того, существует несколько способов предотвращения атак подмены в серверной части сервера, включая (Источник):

  • Использование базовой аутентификации HTTP (или OAuth, если вы хотите пойти дальше)
  • Использование общего секрета (ключа API)
  • Включая подпись для проверки того, что содержимое не было изменено (например, HMAC, см. Требуется ли HMAC при использовании связи TLS?)

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