Certains produits proxy définissent un flux de connexion qui fournit un cookie ou un jeton pour les requêtes proxy suivantes. Si ce jeton doit apparaître sur CONNECT, gardez-le séparé des cookies destinés au site web à l'intérieur du tunnel.

libcurl fournit une liste dédiée d'en-têtes personnalisés pour le proxy. Dans une application C déjà initialisée, un fragment de configuration peut ressembler à ceci :

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);

Cela n'est approprié que lorsque le protocole de connexion documenté du proxy exige cet en-tête. Vérifiez les résultats d'allocation et d'options dans le code environnant, conservez la liste jusqu'à la fin du transfert, puis effacez ou remplacez le pointeur du handle avant de libérer la liste.

Avec une gestion séparée des en-têtes, libcurl envoie la liste proxy sur CONNECT et la liste de destination sur la requête à l'intérieur du tunnel établi. Le proxy reçoit donc le jeton du fournisseur sans que ce jeton ne devienne un cookie du site web. Cette séparation est la valeur par défaut depuis libcurl 7.42.1 ; l'option explicite rend le comportement voulu visible.

Un pot de cookies de navigateur est un autre mécanisme

Activer le moteur de cookies de libcurl ou définir un cookie pour la destination ne reproduit pas automatiquement le flux de connexion proxy propriétaire d'un navigateur. CONNECT a lieu avant l'échange HTTPS avec la destination. Identifiez les exigences réelles du produit au lieu de copier un cookie de site capturé dans chaque requête.

Si le proxy utilise l'authentification proxy HTTP standard, utilisez plutôt les identifiants de proxy de libcurl et les options d'authentification prises en charge. Un 407 avec Proxy-Authenticate est un protocole différent d'une page de connexion HTML renvoyant un jeton de session.

Limitez le jeton à son point de terminaison proxy et à sa durée de vie prévue. Lors du passage à un autre intermédiaire, remplacez la liste d'en-têtes dans le cadre de ce changement de configuration. Une liste générale d'en-têtes de requête est un mauvais endroit pour un secret qui n'appartient qu'à un seul proxy.

Articles similaires