Как предотвратить соединение cURL с localhost? - PullRequest
0 голосов
/ 14 января 2019

Я реализую службу PHP, которая позволяет приложению для закладок извлекать заголовки страниц URL-адресов. Сервер загрузит HTML-код и извлечет заголовок страницы, но для этого необходимо, чтобы пользователь предоставил URL-адрес для извлечения.

С точки зрения безопасности, я думаю, что пользователь может атаковать локальный хост, чтобы посмотреть, есть ли какие-либо HTTP-сервисы, которые не доступны извне.

Я попытался настроить, какой сетевой интерфейс должен использовать cURL, но для этого необходимо, чтобы с каким интерфейсом был настроен PHP. Это может быть проблемой, когда я запускаю эту службу в таком контейнере, как Docker, что усложняет задачу.

Есть ли опция конфигурации для cURL, которая предотвращает соединения с локальным хостом?

Или есть ли способ заставить cURL использовать только внешний сетевой интерфейс?

1 Ответ

0 голосов
/ 15 января 2019

отметьте этот ответ , и этот код, в частности

$info=parse_url($url);
$host=strtolower($info["host"]);
if ($host === "localhost" || ((false !== filter_var ( $host, FILTER_VALIDATE_IP )) && (false === filter_var ( $host, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE )))) {
    $errors [] = "localhost and LAN IP URLs are not allowed.";
}

(но, как объяснено в указанном ответе, вам, вероятно, следует также следить за URL-адресами, не относящимися к http, предоставленными хакерами, такими как file:///etc/passwd, что заставит curl возвращать файлы локальной файловой системы ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...