Kion REMOTE_ADDR de PHP fakte diras al vi malantaŭ VPN
Ĝi estas valoro liverita de via retservilo, ne demando en la tunelon. Sekvu la vojon de la peto, kontrolu kiu rajtas reskribi ĝin, kaj tenu la identecon en la aplikaĵo.
Iu demandas, kial VPN-uzanto aperas en la protokolo de la aplikaĵo kun adreso apartenanta al la pordego, aŭ kun adreso kiu ŝanĝiĝis post la tagmanĝo. La respondo komenciĝas per tio, kio estas tiu valoro: enskribo, kiun la retservilo metis en la petomedion. Ĝi ne estas demando en la tunelon, ne estas identeco de atestilo, kaj ne estas promeso, ke la numero apartenas al unu persono. Legi ĝin kiel iun el tiuj tri donas memfidajn respondojn, kiuj estas malĝustaj laŭ diversaj manieroj.
La valoro venas de la servilo, ne de la tunelo
PHP ricevas la petomedion de tio, kio plenumis la skripton. La referenco pri servilaj variabloj de PHP priskribas tiujn enskribojn kiel kreitajn de la retservilo, kun disponebleco kiu dependas de tio, kiel alvenis la peto.
Skripto ruligita kiel komandlinia hoko de la VPN estas tute alia plenummedio. Ĝi havas neniun retpeton, neniun klientan ingon kaj neniun REMOTE_ADDR, tial retkodo kopiita en hokon donas malplenajn valorojn anstataŭ malĝustajn. La hoko havas sian propran medion, plenigitan de la demono, kaj ĝi estas dokumentita aparte. Serĉi tie REMOTE_ADDR estas serĉi variablon, kiu neniam estis agordita.
Tenu tiun distingon en la kapo antaŭ ol kompari du protokolojn. Eble vi komparas paĝpeton kun hoko, kaj tio tute ne estas komparo. Kontrolu unue la plenumbildon kaj poste la adreson.
Sekvu la vojon de la peto antaŭ ol fidi la numeron
La raportita adreso estas la samtavolano de la konekto, kiun vidis la retservilo. Enmetu ion ajn inter la kliento kaj tiu servilo kaj la samtavolano ŝanĝiĝas. Traduko, finigo kaj ŝarĝobalancado ĉiu movas la observon unu paŝon pli for de la uzanto.
Kvar kutimaj vojoj produktas kvar malsamajn observojn.
| 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 |
Skribu la vojon kun la celnomo, la adresfamilio kaj ĉiu tradukpunkto. Sen tiu mapo, korekta kaj malĝusta valoroj aspektas identaj en protokola linio. Du linioj da diagramo ŝparas posttagmezon da diskutado.
Anstataŭigo okazas nur tie, kie ĝi estas agordita
Servilo aŭ kadro povas intence anstataŭigi la klientan adreson. La modulo remote-IP de Apache kaj la modulo real-IP de NGINX ambaŭ faras tion, kaj la valoro, kiun PHP ricevas, dependas de tiu agordo kaj de la parametroj transdonitaj al la skripta traktilo.
Do REMOTE_ADDR ne estas ĉiam la netuŝita TCP-samtavolano. Ĝi estas la samtavolano tiel, kiel la servilo elektis raporti ĝin post apliko de sia propra politiko. Tiu distingo decidas, ĉu la valoro estas pruvo aŭ ornamo.
Demandu la servilan posedanton, kiu kampo estas aŭtoritata en ĉi tiu efektivigo kaj kiel la origina samtavolano konserviĝas, kiam okazas anstataŭigo. Se neniu povas respondi, la protokolo ankoraŭ pruvas nenion.
Ne legu plusendajn kapliniojn kun fido
La alvokanto povas mem sendi plusendajn kapliniojn. Trakti la unuan komse apartigitan enskribon kiel kontrolitan uzanto-adreson signifas decidi fidi ĉiun, kiu konektiĝas, ĝuste la malo de la celo de la kaplinio. La kaplinio priskribas ĉenon, kaj nur fidata tavolo povas garantii tiun ĉenon.
Uzu la subtenon de fidataj prokuroj de la servilo aŭ kadro kun la reala prokura ĉeno agordita, kaj lasu ĝin forĵeti valorojn el fontoj ekster tiu ĉeno. Mane skribita analizado estas la loko, kie loĝas la plej multaj interesaj paneoj.
Adreso raportita de prokuro ankaŭ ne ŝanĝas la pakaĵfonton, kiun vidas fajroŝirmilo pli supre. Tenu HTTP-metadatumojn kaj retan filtradon kiel apartajn observojn, ĉar ili respondas al malsamaj demandoj.
Uzu la identecon de la aplikaĵo por decidoj
Por aliro al la rikordoj de uzanto, fidu la aŭtentikigitan principon kaj la rajtigajn regulojn de la aplikaĵo. Interna adreso povas esti realokita, kaj unu tradukita adreso povas reprezenti centojn da samtempaj uzantoj. Neniun el tiuj ecoj povas ripari adreskontrolo.
Se la operacioj bezonas ligi peton al VPN-sesio, ligi la observitan adreson kaj la tempomarkon al aŭtoritataj sesiaj rikordoj laŭ la traduka modelo, kiun vi dokumentis. Tio produktas ligon, kiun vi povas defendi; sola adreso ne.
Por diagnozo, protokolu la kelkajn kamojn, kiujn vi bezonas, anstataŭ la tuta servila tabelo, kiu povas porti kapliniojn kaj aŭtentikigan materialon. La utila konkludo diras, kion ĉi tiu valoro signifas en ĉi tiu efektivigo, ne kiu valoro plej similas al kliento.