Traduire cette page

Exprimez derrière les mandataires

Lorsque vous exécutez une application Express derrière un proxy inverse, certaines des API Express peuvent retourner des valeurs différentes de celles attendues. Pour ajuster pour cela, le paramètre trust proxy de l’application peut être utilisé pour exposer des informations fournies par le proxy inverse dans les API Express. Le problème le plus courant est les API express qui exposent l’adresse IP du client peut à la place afficher une adresse IP interne du proxy inverse.

Lors de la configuration du paramètre trust proxy, il est important de comprendre la configuration exacte du proxy inverse . Puisque ce paramètre fera confiance aux valeurs fournies dans la requête, Il est important que la combinaison du paramètre dans Express corresponde à la façon dont le proxy inversé fonctionne.

Le paramètre de l’application trust proxy peut être défini à l’une des valeurs listées dans la table suivante.

TypeValeur
Boolean

Si true, l’adresse IP du client est comprise comme l’entrée la plus à gauche dans l’en-tête X-Forwarded-For.

Si false, l’application est comprise comme faisant directement face au client et l’adresse IP du client est dérivée de req.socket.remoteAddress. Ceci est le paramètre par défaut.

Lorsque vous définissez sur true, il est important de s’assurer que le dernier proxy inversé fiable est de supprimer/écraser tous les en-têtes HTTP suivants : X-Forwarded-For, X-Forwarded-Host, et X-Forwarded-Proto, sinon il sera possible pour le client de fournir n’importe quelle valeur.

Adresses IP

Une adresse IP, un sous-réseau ou un tableau d’adresses IP et de sous-réseaux à confier comme étant un proxy inverse. La liste suivante montre les noms de sous-réseaux pré-configurés :

  • loopback - 127.0.0.1/8, ::1/128
  • linklocal - 169.254.0.0/16, fe80::/10
  • uniquelocal - 10.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7

Vous pouvez définir les adresses IP de l’une des façons suivantes :

app.set('trust proxy', 'loopback'); // specify a single subnet
app.set('trust proxy', 'loopback, 123.123.123.123'); // specify a subnet and an address
app.set('trust proxy', 'loopback, linklocal, uniquelocal'); // specify multiple subnets as CSV
app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']); // specify multiple subnets as an array

Lorsqu’il est spécifié, les adresses IP ou les sous-réseaux sont exclus du processus de détermination de l’adresse, et l’adresse IP non fiable la plus proche du serveur d’application est déterminée comme l’adresse IP du client. Cela fonctionne en vérifiant si req.socket.remoteAddress est fiable. Si c’est le cas, alors chaque adresse dans X-Forwarded-For est vérifiée de droite à gauche jusqu’à la première adresse non fiable.

Nombre

Utilisez l’adresse qui est au plus n nombre de sauts loin de l’application Express. req.socket.remoteAddress est le premier saut, et le reste est recherché dans l’en-tête X-Forwarded-For de droite à gauche. Une valeur de 0 signifie que la première adresse non fiable serait req.socket.remoteAddress, c’est-à-dire qu’il n’y a pas de proxy inverse.

Lors de l’utilisation de ce paramètre, il est important de s’assurer qu’il n’y a pas de multiples, chemins différents vers l’application Express de sorte que le client peut être inférieur au nombre de sauts configurés, sinon il pourrait être possible pour le client de fournir n’importe quelle valeur.

Fonction

Implémentation de confiance personnalisée.

app.set('trust proxy', (ip) => {
if (ip === '127.0.0.1' || ip === '123.123.123.123')
return true; // trusted IPs
else return false;
});

Activer trust proxy aura l’impact suivant :

  • La valeur de req.hostname est dérivée de la valeur définie dans l’en-tête X-Forwarded-Host, qui peut être définie par le client ou par le proxy.

  • X-Forwarded-Proto peut être défini par le proxy inverse pour dire à l’application si c’est https ou http ou même un nom invalide. Cette valeur est reflétée par req.protocol.

  • Les valeurs req.ip et req.ips sont remplies en fonction de l’adresse du socket et de l’en-tête X-Forwarded-For, à partir de la première adresse non fiable.

Le paramètre trust proxy est implémenté en utilisant le paquet proxy-addr. Pour plus d’informations, voir sa documentation.