Ką iš tiesų pasako PHP REMOTE_ADDR už VPN
Tai reikšmė, kurią pateikė jūsų žiniatinklio serveris, o ne užklausa į tunelį. Peržiūrėkite užklausos kelią, patikrinkite, kas gali jį perrašyti, ir laikykite tapatybę programoje.
Kažkas klausia, kodėl VPN naudotojas programos žurnale pasirodo su adresu, priklausančiu vartams, arba su adresu, kuris pasikeitė po pietų. Atsakymas prasideda nuo to, kas yra ši reikšmė: įrašas, kurį žiniatinklio serveris įdėjo į užklausos aplinką. Tai nėra užklausa į tunelį, ne sertifikato tapatybė ir ne pažadas, kad numeris priklauso vienam asmeniui. Skaitymas kaip bet kurio iš šių trijų duoda pasitikinčius atsakymus, kurie yra klaidingi įvairiais būdais.
Reikšmė ateina iš serverio, o ne iš tunelio
PHP gauna užklausos aplinką iš to, kas įvykdė scenarijų. PHP serverio kintamųjų nuoroda aprašo šiuos įrašus kaip žiniatinklio serverio sukurtus, o jų prieinamumas priklauso nuo to, kaip atėjo užklausa.
Scenarijus, paleistas kaip VPN komandinės eilutės kabliukas, yra visiškai kitas vykdymo kontekstas. Jis neturi žiniatinklio užklausos, kliento lizdo ir REMOTE_ADDR, todėl į kabliuką nukopijuotas žiniatinklio kodas duoda tuščias reikšmes, o ne klaidingas. Kabliukas turi savo aplinką, kurią užpildo diegonas, ir ji dokumentuota atskirai. Siekti ten REMOTE_ADDR reiškia siekti kintamojo, kuris niekada nebuvo nustatytas.
Turėkite šį skirtumą omenyje prieš lygindami du žurnalus. Galbūt lyginate puslapio užklausą su kabliuku, o tai visai ne palyginimas. Pirmiausia patikrinkite vykdymo kontekstą, o paskui adresą.
Peržiūrėkite užklausos kelią prieš pasitikėdami numeriu
Praneštas adresas yra to ryšio partneris, kurį matė žiniatinklio serveris. Įterpkite ką nors tarp kliento ir to serverio, ir partneris pasikeis. Vertimas, užbaigimas ir apkrovos balansavimas kiekvienas pastumia stebėjimą vienu žingsniu toliau nuo naudotojo.
Keturi įprasti keliai duoda keturis skirtingus stebėjimus.
| 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 |
Užrašykite kelią su tikslo pavadinimu, adresų šeima ir kiekvienu vertimo tašku. Be to žemėlapio teisinga ir klaidinga reikšmė žurnalo eilutėje atrodo vienodai. Dvi diagramos eilutės sutaupo popietę ginčų.
Pakeitimas vyksta tik ten, kur jis sukonfigūruotas
Serveris arba karkasas gali sąmoningai pakeisti kliento adresą. Apache remote-IP modulis ir NGINX real-IP modulis abu tai daro, o reikšmė, kurią gauna PHP, priklauso nuo šios konfigūracijos ir parametrų, perduotų scenarijaus apdorotojui.
Taigi REMOTE_ADDR ne visada yra nepaliestas TCP partneris. Tai partneris toks, kokį serveris nusprendė pranešti pritaikęs savo pačių politiką. Šis skirtumas nulemia, ar reikšmė yra įrodymas, ar puošmena.
Paklauskite serverio savininko, kuris laukas yra autoritetingas šiame diegime ir kaip išsaugomas pradinis partneris, kai įvyksta pakeitimas. Jei niekas negali atsakyti, žurnalas dar nieko neįrodo.
Neskaitykite persiuntimo antraščių pasitikėdami
Skambintojas gali pats siųsti persiuntimo antraštes. Pirmą kableliu atskirtą įrašą laikyti patvirtintu naudotojo adresu reiškia nuspręsti tikėti kiekvienu, kuris prisijungia, o tai yra priešingybė antraštės paskirčiai. Antraštė aprašo grandinę, ir tik patikimas sluoksnis gali už ją garantuoti.
Naudokite serverio arba karkaso patikimų tarpininkų palaikymą su sukonfigūruota realia tarpininkų grandine ir leiskite jam išmesti reikšmes iš šaltinių, esančių už tos grandinės. Ranka rašyta analizė yra vieta, kur gyvena dauguma įdomių gedimų.
Tarpininko praneštas adresas taip pat nekeičia paketų šaltinio, kurį mato aukščiau esanti užkarda. Laikykite HTTP metaduomenis ir tinklo filtravimą atskirais stebėjimais, nes jie atsako į skirtingus klausimus.
Sprendimams naudokite programos tapatybę
Norėdami pasiekti naudotojo įrašus, pasikliaukite autentifikuotu subjektu ir programos autorizacijos taisyklėmis. Vidinį adresą galima perskirti, o vienas išverstas adresas gali atstovauti šimtams vienu metu dirbančių naudotojų. Nė vienos iš šių savybių adreso patikra negali pataisyti.
Jei operacijoms reikia susieti užklausą su VPN sesija, susiekite stebimą adresą ir laiko žymą su autoritetingais sesijų įrašais pagal dokumentuotą vertimo modelį. Tai sukuria sąsają, kurią galite apginti; vien adresas to nepadaro.
Diagnostikai registruokite tuos kelis reikiamus laukus, o ne visą serverio masyvą, kuris gali turėti antraščių ir autentifikavimo medžiagos. Naudinga išvada pasako, ką ši reikšmė reiškia šiame diegime, o ne kuri reikšmė labiausiai panaši į klientą.