Les proxys fonctionnent sur le principe qu’ils existent pour transmettre des requêtes d’un système à un autre. Ils ajoutent généralement une certaine valeur – sinon ils ne seraient pas au milieu – comme l’équilibrage de charge (évolutivité), la prévention des fuites de données (sécurité) ou la compression (performance).
Le fait est que la requête envoyée par le client est par ailleurs transmise, sans modification, à sa destination cible.
C'est là que les choses peuvent devenir risquées. Aujourd’hui, nous constatons que plus de la moitié de toutes les applications livrées via un proxy utilisent X-Forwarded-For. 56 % des applications réelles et en direct l'utilisent, ce qui en fait une donnée assez importante. X-Forwarded-For est l'en-tête HTTP personnalisé qui transporte l'adresse IP d'origine d'un client afin que l'application à l'autre extrémité sache de quoi il s'agit. Sinon, il ne verrait que l'adresse IP du proxy, ce qui met certaines applications en colère.
C'est parce qu'un bon nombre d'applications s'appuient sur la connaissance de l'adresse IP réelle d'un client pour aider à prévenir la fraude et permettre l'accès. Si vous vous êtes récemment connecté à votre banque, à Gmail ou à votre compte Xbox (hé, c'est là que se trouve Minecraft , d'accord ?) à partir d'un appareil autre que celui que vous utilisez habituellement, vous avez peut-être reçu un avertissement de sécurité. Parce que les informations sur l'endroit à partir duquel vous vous connectez sont également suivies, en partie pour détecter les tentatives de fraude et d'utilisation abusive.
Votre adresse IP réelle est également utilisée pour autoriser ou refuser l'accès à certains systèmes et comme moyen de déduire votre emplacement physique. C’est pourquoi ces e-mails d’avertissement incluent souvent la question « Vous vous êtes connecté depuis la Bulgarie ? »
Certains systèmes utilisent également X-Forwarded-For pour renforcer le contrôle d'accès. WordPress, par exemple, utilise le fichier .htaccess pour autoriser l’accès en fonction des adresses IP. Non, ce n’est pas la meilleure solution, mais c’est une solution courante, et il faut au moins leur donner du crédit pour avoir essayé de fournir une certaine protection des applications contre les abus.
Que ce soit une bonne idée ou non, si vous envisagez d'utiliser X-Forwarded-For dans le cadre de votre schéma d'authentification ou d'autorisation, vous devez probablement faire de votre mieux pour vous assurer qu'il s'agit bien de la véritable adresse IP du client. Il s’agit de l’un des facteurs les plus couramment utilisés dans l’équation de sécurité globale ; un facteur qui protège autant le consommateur que les intérêts de l’entreprise.
Mais si vous acceptez aveuglément tout ce que le client vous envoie dans cet en-tête, vous risquez de permettre à quelqu'un d'usurper la valeur et ainsi de contourner les mécanismes de sécurité destinés à empêcher tout accès illégitime. Après tout, je peux usurper à peu près tout ce que je veux en écrivant quelques lignes de code ou en récupérant l’un des nombreux plug-ins Chrome qui me permettent de manipuler facilement les en-têtes HTTP.
L’une des façons de garantir que vous obtenez l’adresse IP réelle est de ne pas faire confiance à la saisie de l’utilisateur. Oui, il y a encore cette règle de sécurité zéro . Ne faites jamais confiance aux commentaires des utilisateurs. Et nous savons que les en-têtes HTTP sont des entrées utilisateur , qu'elles le paraissent ou non.
Si vous avez déjà un proxy, tant mieux. Si ce n’est pas le cas, vous devriez vous en procurer un. Parce que c’est ainsi que vous extrayez et placez la bonne valeur dans X-Forwarded-For et arrêtez les usurpateurs dans leur élan.
Fondamentalement, vous voulez que votre proxy puisse accéder à une requête et trouver l’adresse IP réelle cachée dans son paquet IP. Certains proxys peuvent le faire avec une configuration ou des politiques, d'autres nécessitent une certaine magie programmatique. Quelle que soit la manière dont vous l'obtenez, c'est la valeur que vous mettez dans l'en-tête HTTP X-Forwarded-For et procédez normalement. Cela garantit que les applications ou les services en aval disposent d’informations précises sur lesquelles prendre leurs décisions, y compris celles concernant l’accès et l’autorisation.
Pour la plupart des architectures et des situations, cela atténuera la possibilité qu'un X-Forwarded-For falsifié soit utilisé pour obtenir un accès non autorisé. Comme toujours, plus vous disposez d’informations pour comprendre précisément le client – et sa légitimité – meilleure est votre sécurité. La combinaison de l'adresse IP (dans X-Forwarded-For) avec le type d'appareil, les agents utilisateurs et d'autres informations automatiquement transportées dans les protocoles HTTP et réseau fournit un contexte plus robuste dans lequel prendre une décision éclairée.
Soyez prudent!
Ressources pour la gestion de X-Forwarded-For :