curl — Как мне безопасно отправить серверный постбэк с помощью PHP?

Я создаю приложение, которое отправит http-запрос на URL-адрес (надеюсь …), предоставленный пользователем.

Вероятно, большинство из вас будет знать, что это обратный звонок, обратный звонок или веб-крючок.

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

Я рассмотрел следующие функции:

  • Скручивание ()
  • file_get_contents ()

Какой самый безопасный способ сделать это, не открывая уязвимости безопасности?

1

Решение

В любом случае у вас нет проблем с безопасностью, если вы не обрабатываете ответ сервера.

Например, когда вы используете:

$url = 'http://www.example.com/testaddr';
$result = file_get_contents($url);
unset($result);

У вас есть переменная с данными. Но эти данные еще не обработаны.

С cURL вы можете получить такой же подход с этими опциями:

$url = 'http://www.example.com/testaddr';
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($curl);

//If you need to check result, use this:
if (!curl_errno($curl)) {
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_code === 200) {
echo "OK";
} else {
echo 'Unexpected HTTP code: ', $http_code, "\n";
}
}
curl_close($curl);
unset($result);

В этом случае то же самое, вы получите ответ на $ result var, но вы его не использовали, в этом случае это не сбой системы безопасности.

Кроме того, в обоих случаях по соображениям безопасности и предотвращения чрезмерного использования памяти я удаляю переменную $ result после завершения процесса.

Как вы можете видеть на PHP документ:

CURLOPT_RETURNTRANSFER TRUE для возврата перевода в виде строки
вернуть значение curl_exec () вместо непосредственного вывода.

2

Другие решения

Два разных уровня

Я думаю, что у вас есть два разных уровня безопасности, к которым вы хотите обратиться. Возможно, вы захотите обезопасить канал связи, чтобы избежать подмены http-запроса, и вам может потребоваться очистить ответ, чтобы избежать неприятных побочных эффектов.

Защита HTTP-запроса

Эта часть во многом зависит от сервера назначения и от того, как осуществляется связь. Если вы можете применить HTTPS, то вы можете быть в полной безопасности от MITM атаки. В противном случае вы всегда подвержены подделке.

Санитарная обработка ответа

Когда вы получите ответ на свой сервер, все зависит от того, как вы используете эти данные. Это не имеет ничего общего с функцией выбора, а скорее с тем, как вы используете данные после вызова.
Поскольку вы разрешаете пользователям вводить данные таким образом, ожидайте худшего. На этом этапе применяются наиболее распространенные передовые методы для очистки входных данных: используйте PDO для доступа к базе данных, экранируйте символы с помощью &#xHH; формат и тд.

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

1