Voor gebruik van XFF binnen wikimedia, zie meta:XFF project

X-Forwarded-For (XFF) is een HTTP-header en een de facto standaard voor het achterhalen van het IP-adres van een client wanneer deze verbinding zoekt met een webserver door middel van een HTTP-proxy of een load balancer (werklastverdeler). Deze header werd geïntroduceerd door de ontwikkelaars van de proxyserver squid cache.

De cacheservers zijn hierbij vaak die van grote internetproviders (ISP's) die hun gebruikers aanmoedigen of dwingen proxyservers te gebruiken om toegang te krijgen tot het wereldwijd web (internet). Dit wordt vaak gedaan om externe bandbreedte te beperken door middel van caching. In sommige gevallen vormen deze proxyservers transparante proxy's (onzichtbare proxy's) en kan het zijn dat de gebruiker niet weet dat hij of zij hiervan gebruikmaakt.

Wanneer geen gebruik wordt gemaakt van XFF of een soortgelijke techniek, toont een verbinding door middel van een proxy alleen het IP-adres van de proxyserver, waarmee de proxyserver effectief een dienst wordt waarmee de gebruiker anoniem het internet kan bezoeken. Dit maakt het achterhalen en voorkomen van misbruik door dergelijke gebruikers behoorlijk moeilijker dan wanneer het IP-adres wel bekend is. De bruikbaarheid van XFF hangt af van de vraag of de proxyserver de resulterende host (eigenaar) van het IP-adres juist weergeeft. Om deze reden moet voor het effectief gebruiken van XFF duidelijkheid zijn over welke proxy's wel en welke niet betrouwbaar zijn. Deze informatie kan bijvoorbeeld verkregen worden door deze op te zoeken op een witte lijst van servers waarvan de beheerders kunnen worden vertrouwd.

Gebruik bewerken

Het algemene formaat van de header is:

X-Forwarded-For: client1, proxy1, proxy2

Hierbij wordt de waarde gevormd door een lijst van IP-adressen gescheiden door een komma+spatie. Het meest linkse IP-adres vormt de client die het verst downstream staat van de server en elke opeenvolgende proxy die het verzoek doorvoerde met toevoeging van het IP-adres waarvan het verzoek afkomstig was. In dit voorbeeld verliep het verzoek via proxy1, proxy2 en proxy3 (proxy3 wordt daarbij getoond als het 'remote address' (IP-adres van een computer, zoals zichtbaar voor andere computers) van het verzoek).

Aangezien het eenvoudig is om een X-Forwarded-For header te vervalsen dient voorzichtigheid te worden betracht met betrekking tot de getoonde informatie. Het laatste IP-adres is altijd het IP-adres dat verbonden is met de laatste proxy, hetgeen betekent dat dit de meest betrouwbare bron van informatie is. X-Forwarded-For-gegevens kunnen worden gebruikt in een scenario met een forward (uitgaand verkeer) of een reverse proxy (inkomend verkeer).