Os proxies operam com a premissa de que existem para encaminhar solicitações de um sistema para outro. Eles geralmente agregam algum valor – caso contrário, não estariam no meio – como balanceamento de carga (escala), prevenção de vazamento de dados (segurança) ou compactação (desempenho).
O problema é que a solicitação enviada pelo cliente é passada, sem modificações, para seu destino.
É aqui que as coisas podem ficar complicadas. Hoje, vemos mais da metade de todos os aplicativos entregues por meio de um proxy fazer uso do X-Forwarded-For. 56% dos aplicativos reais e ativos o utilizam, o que o torna um dado bastante significativo. X-Forwarded-For é o cabeçalho HTTP personalizado que carrega o endereço IP original de um cliente para que o aplicativo na outra extremidade saiba qual é. Caso contrário, ele só veria o endereço IP do proxy, o que deixa alguns aplicativos irritados.
Isso ocorre porque um bom número de aplicativos depende do conhecimento do endereço IP real de um cliente para ajudar a prevenir fraudes e permitir o acesso. Se você fez login no seu banco, no Gmail ou na sua conta do Xbox recentemente (ei, é onde o Minecraft fica, ok?) em um dispositivo diferente daquele que você normalmente usa, você pode ter recebido um aviso de segurança. Porque as informações sobre onde você faz login também são rastreadas, em parte para detectar tentativas de fraude e uso indevido.
Seu endereço IP real também é usado para permitir ou negar acesso em alguns sistemas e como um meio de deduzir sua localização física. É por isso que esses avisos por e-mail geralmente incluem "foi você que fez login na Bulgária?"
Alguns sistemas também usam X-Forwarded-For para impor o controle de acesso. O WordPress, por exemplo, usa o arquivo .htaccess para permitir acesso com base em endereços IP. Não, não é a melhor solução, mas é uma solução comum, e você tem que pelo menos dar crédito a eles por tentarem fornecer alguma proteção ao aplicativo contra uso indevido.
Independentemente de ser uma boa ideia ou não, se você for usar o X-Forwarded-For como parte do seu esquema de autenticação ou autorização, você provavelmente deve fazer o máximo para garantir que esse seja realmente o endereço IP real do cliente. É um dos fatores mais comumente usados na equação geral de segurança; um fator que protege tanto o consumidor quanto os interesses corporativos.
Mas se você aceitar cegamente tudo o que o cliente lhe envia nesse cabeçalho, você pode estar permitindo que alguém falsifique o valor e, assim, ignore os mecanismos de segurança destinados a impedir acesso ilegítimo. Afinal, posso falsificar praticamente tudo o que eu quiser, escrevendo algumas linhas de código ou pegando um dos muitos plug-ins do Chrome que me permitem manipular cabeçalhos HTTP com facilidade.
Uma das maneiras de garantir que você está obtendo o endereço IP real é não confiar na entrada do usuário. Sim, lá vem a Regra de Segurança Zero novamente. Nunca confie na entrada do usuário. E sabemos que os cabeçalhos HTTP são entradas do usuário , quer pareçam ser ou não.
Se você já tem um proxy, ótimo. Se não, você deveria adquirir um. Porque é assim que você extrai e coloca o valor certo em X-Forwarded-For e impede os spoofers de avançar.
Basicamente, você quer que seu proxy consiga acessar uma solicitação e encontrar o endereço IP real que está oculto em seu pacote IP. Alguns proxies podem fazer isso com configuração ou políticas, outros exigem alguma mágica programática. Seja qual for a forma como você o obtém, esse é o valor que você coloca no cabeçalho HTTP X-Forwarded-For e prossegue normalmente. Isso garante que os aplicativos ou serviços downstream tenham informações precisas para tomar suas decisões, incluindo aquelas relacionadas ao acesso e autorização.
Para a maioria das arquiteturas e situações, isso reduzirá a possibilidade de um X-Forwarded-For falsificado ser usado para obter acesso não autorizado. Como sempre, quanto mais informações você tiver para formar uma compreensão precisa do cliente – e sua legitimidade – melhor será sua segurança. A combinação do endereço IP (no X-Forwarded-For) com o tipo de dispositivo, agentes de usuário e outros detalhes transportados automaticamente em protocolos HTTP e de rede fornece um contexto mais robusto para tomar uma decisão informada.
Fique seguro!
Recursos para lidar com X-Forwarded-For: