Navigatie in een PHP-webproxy: relatieve URL's, cookies en origins
Plan resource-URL's, navigatie, cookies en origingrenzen wanneer je ophalen met PHP omzet in een webproxy voor de browser.
Voordat je meer herschrijving aan een PHP-ophaler toevoegt, kies je waar de volgende resource naartoe moet. Een document dat van https://destination.example/catalog/ is opgehaald en op https://viewer.example/browse?url=... wordt teruggegeven, kan dit bevatten:
<img src="photo.jpg">
<a href="details/42">Details</a>De browser lost die verwijzingen op met het document dat hij in de viewer ontving. Dat PHP de oorspronkelijke bytes heeft opgehaald, legt de externe basis niet vast.
Een base-element kan relatieve URL's naar de bestemming wijzen, maar die verzoeken kunnen dan rechtstreeks van browser naar bestemming gaan. Om elk verzoek juist via PHP te laten lopen, zijn proxy-URL's en een breder routeringsmodel nodig:
| Resource of actie | Vereiste afhandeling |
|---|---|
| Links en afbeeldingen | Los ze op tegen het externe document en produceer de bedoelde route |
| CSS-imports en -resources | Gebruik de externe basis van het stylesheet |
| Formulieren | Behoud methode en verzonden gegevens |
| Redirects | Houd navigatie binnen het toegestane model |
| Verzoeken die scripts maken | Behandel URL's die niet in de oorspronkelijke HTML staan |
Enkele vervangingen met reguliere expressies kunnen geen algemene compatibiliteit met scriptrijke sites beloven. Voor een bekend openbaar document kan het genoeg zijn navigatie uit te schakelen, directe links toe te staan of een ondersteunde subset via de viewer te leiden. Behoud de werkelijke mediatypen in plaats van elke reactie als HTML te behandelen.
Onbetrouwbare opmaak vanaf je domein teruggeven geeft die ook de browser-origin van de viewer, niet de identiteit van de opgehaalde site. Isoleer zulke documenten van account- en beheerderspagina's. Definieer externe cookies per bezoeker, toegestane door te sturen headers en redirect-bestemmingen; een gedeelde cookiepot kan externe logins door elkaar halen.
Leg je vast op die ondersteuningsgrens voordat je een browsersessie aanbiedt. Voor gewoon browsen via een andere uitgang behoudt de eigen proxy-interface van de browser, zoals Firefox' HTTP/SOCKS-instellingen, de bestemmings-URL en het origin-model van de browser zonder deze ophaal-en-herpublicatielaag. Voor een aparte test van een openbare site levert de lijst met gratis proxies kandidaat-eindpunten; laat het protocol overeenkomen in de browserinstellingen.