Отделите прокси-заголовки libcurl от заголовков веб-сайта
Дайте libcurl отдельные списки прокси-заголовков и заголовков назначения, признавая, что пересылка открытым текстом имеет другую границу видимости.
Для существующего дескриптора libcurl явно разделите списки заголовков назначения и прокси:
curl_easy_setopt(handle, CURLOPT_HEADEROPT, (long)CURLHEADER_SEPARATE);
curl_easy_setopt(handle, CURLOPT_PROXYHEADER, proxy_headers);
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, origin_headers); Сохраняйте настроенный дескриптор и действительные списки живыми на время передачи. CURLHEADER_SEPARATE отличает заголовки, используемые на CONNECT, от заголовков, используемых для запроса к назначению. Старые примеры единой политики могут помещать обычный список в оба обмена.
| Путь запроса | Значение отдельных списков |
|---|---|
| HTTPS внутри обычного туннеля CONNECT | Сначала происходит обмен с прокси; затем HTTP-заголовки назначения следуют внутри TLS назначения. |
| Обычная пересылка HTTP | Прокси может читать заголовки назначения, а libcurl может использовать оба применимых списка в одном пересылаемом запросе. |
Маркер маршрутизации только для прокси относится к обмену с прокси. При пересылке открытым текстом произвольное настраиваемое поле может достичь источника, если только схема пересылки не обрабатывает его; имя параметра не является гарантией конфиденциальности.
Используйте поддерживаемые параметры учётных данных для аутентификации. Для определяемых оператором метаданных установите, какой шаг их использует и можно ли их пересылать, вместо размещения пароля в общем поле.
Когда маркер отсутствует или выглядит утекающим, определите фактический запрос, содержащий его. Обратный вызов заголовков, показывающий несколько обменов, может заставить правильно разделённые списки выглядеть смешанными.