W porządku, mam mały problem z uwierzytelnianiem. Moja usługa internetowa pozwala połączyć się z moim API przez HTTP za pomocą nazwy użytkownika i hasła, ale to połączenie może być również ograniczone do określonego adresu IP.Jak poprawnie używać protokołu HTTP_X_FORWARDED_FOR?
Oznacza to, że $_SERVER['REMOTE_ADDR']
może być niepoprawny. Wiem już, że nigdy nie można polegać na żadnej informacji IP - mam ograniczenie tylko w celu dodania kolejnej warstwy bezpieczeństwa.
Jeśli jest to ogólny przegląd żądanie do serwera WWW:
clientSERVER => clientPROXY => myPROXY => mySERVER
oznacza to, że mój_serwer pokazuje REMOTE_ADDR
z MyProxy zamiast tego klienta i wysyła rzeczywiste IP klienta jako HTTP_X_FORWARDED_FOR
.
Aby temu zaradzić, moja usługa sieciowa ma listę adresów IP zaufanych serwerów proxy, a jeśli REMOTE_ADDR
pochodzi z jednego z tych zaufanych adresów IP, to informuje moją usługę internetową, że rzeczywisty adres IP jest wartością HTTP_X_FORWARDED_FOR
.
Problem dotyczy teraz clientPROXY. Oznacza to, że (dość często) mySERVER otrzymuje wartość HTTP_X_FORWARDED_FOR
, która ma wiele adresów IP. Zgodnie z dokumentacją HTTP_X_FORWARDED_FOR
, wartością jest rozdzielana przecinkami lista adresów IP, gdzie pierwszym adresem IP jest rzeczywisty prawdziwy klient, a każdy inny adres IP jest adresem proxy.
Tak więc, jeśli HTTP_X_FORWARDED_FOR
ma wiele wartości, a moja usługa jest ograniczona do IP, czy muszę sprawdzić "ostatnią" wartość HTTP_X_FORWARDED_FOR
na mojej dozwolonej liście adresów IP i po prostu zignorować rzeczywisty adres IP klienta?
Zakładam, że w systemie, w którym muszę ustawić listę dozwolonych adresów IP, adres IP na białej liście powinien być adresem serwera proxy, a nie adresem IP znajdującym się za serwerem proxy (ponieważ może to być lokalny adres IP i często się zmieniaj).
A co z HTTP_CLIENT_IP
?
http : //stackoverflow.com/q/7445592/759866 – Benjamin