Я создаю приложение, которое отправит http-запрос на URL-адрес (надеюсь …), предоставленный пользователем.
Вероятно, большинство из вас будет знать, что это обратный звонок, обратный звонок или веб-крючок.
Тем не менее, я беспокоюсь о безопасности, потому что другой сервер отправит ответ. Этот ответ может содержать код или кто что знает.
Я рассмотрел следующие функции:
Какой самый безопасный способ сделать это, не открывая уязвимости безопасности?
В любом случае у вас нет проблем с безопасностью, если вы не обрабатываете ответ сервера.
Например, когда вы используете:
$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 () вместо непосредственного вывода.
Я думаю, что у вас есть два разных уровня безопасности, к которым вы хотите обратиться. Возможно, вы захотите обезопасить канал связи, чтобы избежать подмены http-запроса, и вам может потребоваться очистить ответ, чтобы избежать неприятных побочных эффектов.
Эта часть во многом зависит от сервера назначения и от того, как осуществляется связь. Если вы можете применить HTTPS, то вы можете быть в полной безопасности от MITM атаки. В противном случае вы всегда подвержены подделке.
Когда вы получите ответ на свой сервер, все зависит от того, как вы используете эти данные. Это не имеет ничего общего с функцией выбора, а скорее с тем, как вы используете данные после вызова.
Поскольку вы разрешаете пользователям вводить данные таким образом, ожидайте худшего. На этом этапе применяются наиболее распространенные передовые методы для очистки входных данных: используйте PDO для доступа к базе данных, экранируйте символы с помощью &#xHH; формат и тд.
Я надеюсь, что это может ответить на ваши вопросы, в противном случае не стесняйтесь комментировать мой ответ!