Wat REMOTE_ADDR van PHP jou werklik agter 'n VPN vertel
Dit is 'n waarde wat jou webbediener gelewer het, nie 'n navraag in die tonnel nie. Volg die versoek se pad, kyk wie dit mag herskryf, en hou identiteit in die toepassing.
Iemand vra hoekom 'n VPN-gebruiker in die toepassing se log verskyn met 'n adres wat aan die poort behoort, of met 'n adres wat ná middagete verander het. Die antwoord begin by wat dié waarde is: 'n inskrywing wat die webbediener in die versoek se omgewing geplaas het. Dit is nie 'n navraag in die tonnel nie, nie 'n sertifikaatidentiteit nie, en nie 'n belofte dat die nommer aan een persoon behoort nie. Om dit as enige van dié drie te lees lewer selfversekerde antwoorde wat op verskillende maniere verkeerd is.
Die waarde kom van die bediener, nie uit die tonnel nie
PHP ontvang die versoek se omgewing van wat die script uitgevoer het. Die PHP-verwysing vir bedienerveranderlikes beskryf hierdie inskrywings as deur die webbediener geskep, met 'n beskikbaarheid wat afhang van hoe die versoek aangekom het.
'n Script wat as 'n opdragreël-haak van die VPN loop, is 'n heeltemal ander uitvoeringskonteks. Dit het geen webversoek nie, geen kliëntsok nie en geen REMOTE_ADDR nie, en daarom lewer webkode wat in 'n haak gekopieer word leë waardes eerder as verkeerde. Die haak het sy eie omgewing, gevul deur die daemon, en dit word afsonderlik gedokumenteer. Om daar na REMOTE_ADDR te gryp is om na 'n veranderlike te gryp wat nooit gestel is nie.
Hou dié onderskeid in gedagte voordat jy twee logs vergelyk. Jy vergelyk dalk 'n bladsyversoek met 'n haak, en dit is glad geen vergelyking nie. Kyk eerste na die uitvoeringskonteks en daarna na die adres.
Volg die versoek se pad voordat jy die nommer vertrou
Die gerapporteerde adres is die eweknie van die verbinding wat die webbediener gesien het. Sit enigiets tussen die kliënt en daardie bediener en die eweknie verander. Vertaling, beëindiging en lasbalansering skuif elkeen die waarneming een sprong verder van die gebruiker af.
Vier algemene paaie lewer vier verskillende waarnemings.
| Path to the listener | What can be reported |
|---|---|
| Client routed straight to the private listener, no translation | The client's tunnel address |
| Gateway translates the source before forwarding | The gateway's translated address |
| Reverse proxy terminates the client and opens its own backend connection | The proxy's backend address |
| Load balancer in front of two proxies | Whichever hop the server treats as its peer |
Skryf die pad neer met die bestemming se naam, die adresfamilie en elke vertalingspunt. Sonder daardie kaart lyk 'n korrekte en 'n verkeerde waarde identies in 'n logreël. Twee reëls diagram spaar 'n middag se argument.
Vervanging gebeur net waar dit opgestel is
'n Bediener of raamwerk kan die kliënt se adres doelbewus vervang. Die remote-IP-module van Apache en die real-IP-module van NGINX doen albei dit, en die waarde wat PHP ontvang hang af van daardie opstelling plus die parameters wat aan die scripthanteerder gegee word.
REMOTE_ADDR is dus nie universeel die onaangeraakte TCP-eweknie nie. Dit is die eweknie soos die bediener gekies het om dit te rapporteer nadat hy sy eie beleid toegepas het. Dié onderskeid bepaal of die waarde bewyse of versiering is.
Vra die bediener se eienaar watter veld in hierdie ontplooiing gesaghebbend is en hoe die oorspronklike eweknie bewaar word wanneer vervanging plaasvind. As niemand kan antwoord nie, bewys die log nog niks.
Moenie aanstuur-opskrifte op goedertrou lees nie
'n Oproeper kan self aanstuur-opskrifte stuur. Om die eerste komma-geskeide inskrywing as 'n geverifieerde gebruikeradres te behandel, is om te besluit om enigiemand te glo wat verbind, die teenoorgestelde van waarvoor die opskrif bedoel is. Die opskrif beskryf 'n ketting, en net 'n vertroude laag kan vir daardie ketting instaan.
Gebruik die bediener of raamwerk se ondersteuning vir vertroude volmagte met die werklike volmagketting opgestel, en laat dit waardes van bronne buite daardie ketting weggooi. Handgeskrewe ontleding is waar die meeste interessante foute woon.
'n Adres wat deur 'n volmag gerapporteer word, verander ook nie die pakketbron wat 'n vuurmuur verder op sien nie. Hou HTTP-metadata en netwerkfiltering as afsonderlike waarnemings, want hulle beantwoord verskillende vrae.
Gebruik die toepassing se identiteit vir besluite
Vir toegang tot 'n gebruiker se rekords, maak staat op die geauthentiseerde prinsipaal en die toepassing se magtigingsreëls. 'n Interne adres kan hertoegewys word, en een vertaalde adres kan honderde gelyktydige gebruikers verteenwoordig. Nie een van dié eienskappe kan 'n adreskontrole regmaak nie.
As bedrywighede 'n versoek aan 'n VPN-sessie moet koppel, koppel die waargenome adres en tydstempel aan gesaghebbende sessierekords volgens die vertalingsmodel wat jy gedokumenteer het. Dit lewer 'n assosiasie wat jy kan verdedig; 'n adres alleen nie.
Vir diagnose, teken die paar velde aan wat jy nodig het eerder as die hele bediener-skikking, wat opskrifte en bekragtigingsmateriaal kan dra. Die nuttige gevolgtrekking sê wat hierdie waarde in hierdie ontplooiing beteken, nie watter waarde die meeste soos 'n kliënt lyk nie.