Manche Proxy-Produkte definieren einen Login-Ablauf, der ein Cookie oder Token für nachfolgende Proxy-Anfragen bereitstellt. Muss dieses Token in CONNECT erscheinen, halten Sie es von Cookies getrennt, die für die Website innerhalb des Tunnels gedacht sind.

libcurl bietet eine eigene Liste benutzerdefinierter Header für den Proxy. In einer bereits initialisierten C-Anwendung kann ein Konfigurationsausschnitt so aussehen:

struct curl_slist *proxy_headers = NULL;
proxy_headers = curl_slist_append(proxy_headers,
    "Cookie: ProxySession=REPLACE_WITH_PROXY_TOKEN");
curl_easy_setopt(handle, CURLOPT_PROXYHEADER, proxy_headers);
curl_easy_setopt(handle, CURLOPT_HEADEROPT,
                 (long) CURLHEADER_SEPARATE);

Das ist nur dann angemessen, wenn das dokumentierte Login-Protokoll des Proxys diesen Header verlangt. Prüfen Sie die Ergebnisse von Zuweisung und Optionen im umgebenden Code, behalten Sie die Liste, bis die Übertragung abgeschlossen ist, und löschen oder ersetzen Sie dann den Zeiger des Handles, bevor die Liste freigegeben wird.

Bei separater Header-Behandlung sendet libcurl die Proxy-Liste bei CONNECT und die Ziel-Liste bei der Anfrage innerhalb des aufgebauten Tunnels. Der Proxy erhält das Hersteller-Token, ohne dass dieses Token zu einem Website-Cookie wird. Diese Trennung ist seit libcurl 7.42.1 Standard; die explizite Option macht das beabsichtigte Verhalten sichtbar.

Ein Browser-Cookie-Speicher ist ein anderer Mechanismus

Das Aktivieren der Cookie-Engine von libcurl oder das Setzen eines Cookies für das Ziel reproduziert nicht automatisch den proprietären Proxy-Login-Ablauf eines Browsers. CONNECT geschieht vor dem HTTPS-Austausch mit dem Ziel. Ermitteln Sie die tatsächlichen Anforderungen des Produkts, statt ein abgefangenes Website-Cookie in jede Anfrage zu kopieren.

Verwendet der Proxy die standardmäßige HTTP-Proxy-Authentifizierung, nutzen Sie stattdessen libcurls Proxy-Anmeldeinformationen und unterstützte Authentifizierungsoptionen. Ein 407 mit Proxy-Authenticate ist ein anderes Protokoll als eine HTML-Login-Seite, die ein Sitzungstoken zurückgibt.

Halten Sie das Token auf seinen Proxy-Endpunkt und seine vorgesehene Lebensdauer beschränkt. Beim Wechsel zu einem anderen Vermittler ersetzen Sie die Header-Liste als Teil dieser Konfigurationsänderung. Eine allgemeine Anfrage-Header-Liste ist ein schlechter Ort für ein Geheimnis, das nur zu einem Proxy gehört.

Ähnliche Artikel