Hoe kun je (veilig) een PHP redirect maken

PHP redirects zijn ontzettend handig, maar kunnen ook riskant zijn als je ze niet goed toepast.
Met de functie header() kun je gebruikers makkelijk doorsturen naar een andere pagina. Maar het gebruik van deze functie is minder simpel dan het lijkt.
In deze tutorial laten we je zien hoe je een PHP redirect maakt zonder dat je later tegen problemen aanloopt.
De basismethode voor een PHP redirect
De meeste tutorials vertellen je dat je voor een PHP redirect gewoon de header() -functie bovenaan je pagina moet gebruiken. Daarmee stuur je de gebruiker door naar een nieuwe URL, zoals dit:
header('Location: '.$newURL.php);
De header functie moet worden geplaatst voordat er HTML of tekst naar de browser wordt gestuurd, dus helemaal bovenaan de pagina. Dat betekent: vóór de <!DOCTYPE> -declaratie, vóór JavaScript en zelfs vóór andere PHP-code. Op die manier wordt de gebruiker correct doorgestuurd naar de nieuwe URL.
Maar hoewel de code eenvoudig lijkt, kan die eenvoud ontwikkelaars een vals gevoel van veiligheid geven. Laten we daarom kijken hoe je deze functie op de juiste manier gebruikt.
die() en exit()
Gebruik altijd die() of exit() na een redirect. Het probleem is namelijk dat crawlers en bots headers kunnen negeren, waardoor de pagina die je dacht om te leiden alsnog volledig toegankelijk blijft. Met andere woorden: als je een php header redirect gebruikt om een pagina te beschermen, biedt dat helemaal geen echte beveiliging.
Daarom is het belangrijk om direct na de redirect te stoppen met het bewerken van de pagina. Dat doe je door die() of exit() toe te voegen, zoals dit:
header("Location: .$newURL.php"); die();
Relatieve en absolute URL’s
Laten we het nu hebben over relatieve en absolute URL’s in redirects. Volgens RFC 7231 kun je beide gebruiken, maar het is belangrijk om zeer voorzichtig te zijn met het gebruik van relatieve redirects. Dit komt doordat sommige website bouwers PHP-pagina’s kunnen samenvoegen of hernoemen. Dit betekent dat als je met een website bouwer werkt, je redirects mogelijk niet meer werken.
Helaas is er geen andere eenvoudige manier om dit probleem te omzeilen dan door nauwkeurig bij te houden waar je redirects naartoe leiden.
Status codes
Het derde probleem met standaard PHP redirects is dat de “locatie” operator van PHP nog steeds de HTTP 302 redirect code terugstuurt. Dit zou je niet moeten toestaan, omdat veel webbrowsers deze code op een manier implementeren die in strijd is met de manier waarop het zou moeten werken: ze gebruiken het GET-command in plaats van een “echte” redirect uit te voeren.
De beste manier om PHP redirects te bouwen, is door de juiste code te specificeren die wordt teruggestuurd. Helaas is de juiste code een twistpunt. HTTP 301 redirect geeft een permanente redirect aan, wat problemen kan veroorzaken als je de oorspronkelijke pagina wilt herstellen. HTTP 303 wordt helaas door veel browsers als “overig” opgevat en kan problemen opleveren bij het indexeren van je pagina door zoekmachines.
In de praktijk, en totdat deze situatie is opgelost, kun je het beste HTTP 303 gebruiken.
Controleer de documentatie
Naast het nemen van de bovenstaande basismaatregelen, is het belangrijk om de tijd te nemen om de documentatie over het gebruik van PHP redirects te lezen voordat je ze gebruikt. Lees de PHP-handleiding om te zorgen dat je de beste werkwijze volgt.
En terwijl je de documentatie doorneemt, is het belangrijk om ervoor te zorgen dat je website goed beschermd is tegen veel voorkomende kwetsbaarheden. Als je al PHP redirects gebruikt, is het waarschijnlijk tijd om de beveiliging van je website te controleren.
Verschillende methoden
Gezien al deze problemen vraag je je waarschijnlijk af waarom je überhaupt een PHP redirect zou gebruiken. Dat is een terechte vraag. Hoewel PHP redirects meestal sneller worden uitgevoerd dan andere soorten redirects, kunnen ze nog steeds nuttig zijn voor het verbeteren van de snelheid van websites. Maar er zijn ook andere opties beschikbaar.
Er zijn twee alternatieven. Je kunt het HTML <meta> element gebruiken om om te leiden vanuit het HTML-gedeelte van je pagina, of je kunt JavaScript gebruiken. De eerste manier, met <meta>, ziet er als volgt uit:
<meta http-equiv="refresh" content="0;url=newpage.php">
De tweede aanpak, met JavaScript, is eleganter en ziet er vaak professioneler uit:
window.location.replace("http://newpage.php/");
Beide benaderingen worden iets langzamer uitgevoerd dan een directe omleiding met php header(), maar bieden wel meer flexibiliteit.
Conclusie
Hoewel de bovenstaande stappen ervoor moeten zorgen dat je PHP redirects veilig worden uitgevoerd, is het waarschijnlijk tijd om de structuur van je website te heroverwegen als je meerdere PHP redirects gebruikt.
Er zijn een paar goede redenen om dat te doen. Ten eerste zijn niet alle webhosts gelijk aan elkaar. Als je al je bezoekers via een omweg door je website stuurt, kan dit de prestaties beïnvloeden.
Ten tweede kan de pagina die je omleidt gegevens over je bezoekers verzamelen zonder dat je je daarvan bewust bent, vooral als je webanalyse software gebruikt om de prestaties van je website bij te houden. In onze post-GDPR-wereld kan dit grote gevolgen hebben.
Samengevat: wees voorzichtig met PHP redirects, gebruik ze op de juiste manier en pas ze alleen toe waar en wanneer het echt nodig is.