Comment faire une redirection PHP (en toute sécurité)
Une redirection PHP est un outil incroyablement utile, mais aussi dangereux en cas de mauvaise implémentation.
Si vous avez lu notre introduction à PHP 7.4 et notre guide sur la façon de créer un site web en 5 minutes, vous savez que la fonction header() peut être utilisée pour rediriger facilement un utilisateur vers une autre page. En réalité, cependant, l’utilisation de cette fonction n’est pas aussi simple qu’il n’y paraît. Dans ce guide, nous vous montrerons comment faire une redirection PHP qui ne pose pas de gros problèmes plus tard.
Sommaire
La méthode de base pour une redirection PHP
La plupart des guides vous diront que pour effectuer une redirection PHP, il suffit d’utiliser la fonction header() en haut de vos pages. Pour ce faire, vous utilisez la fonction pour envoyer une nouvelle URL, comme ceci :
header('Location: '.$newURL.php);
La fonction header doit être placée avant de transmettre tout HTML ou texte aux navigateurs de vos utilisateurs, elle doit donc se trouver en haut de la page. Cela signifie qu’elle doit être placée avant la déclaration <!DOCTYPE>, avant tout code Java et avant tout code PHP. Elle enverra ensuite les utilisateurs à la nouvelle URL.
Bien que cela puisse paraître simple, en ce qui concerne la fonction header(), la simplicité du code peut donner aux développeurs une fausse impression de sécurité. Voyons donc comment utiliser correctement cette fonction.
Die() et Exit ()
Tout d’abord, vous devez utiliser le modificateur die() ou exit() chaque fois que vous utilisez une redirection. En résumé, le problème est que les crawlers et les robots sont capables d’ignorer les en-têtes, et donc la page que vous pensiez rediriger leur est totalement accessible. En d’autres termes, si vous utilisez une redirection de type header pour protéger une page particulière, elle ne vous offre aucune protection.
C’est pourquoi vous devez arrêter le reste du code de la page si la redirection est ignorée. La façon de le faire est d’ajouter die() ou exit() après votre redirection :
header("Location: .$newURL.php"); die();
Liens relatifs et absolus
Ensuite, parlons des liens URL relatifs et absolus dans les redirections. La RFC 7231 vous permet d’utiliser les deux, mais vous devez être extrêmement prudent lorsque vous utilisez des redirections relatives. C’est parce que certains créateurs de sites web rassemblent et renomment les pages PHP. Cela signifie que si vous travaillez sur votre PHP par l’intermédiaire d’un créateur de site web, vous risquez de casser toutes vos redirections.
Malheureusement, il n’existe actuellement aucun moyen réel de contourner ce problème, à moins de garder une vue d’ensemble précise de l’endroit où vos redirections pointent.
Codes d’état
Le troisième problème des redirections PHP standard est que l’opérateur de “localisation” de PHP renvoie toujours le code HTTP 302. Vous ne devriez pas l’autoriser à faire cela, car de nombreux navigateurs web implémentent ce code d’une manière qui est totalement en contradiction avec la manière dont il est censé fonctionner : ils utilisent essentiellement la commande GET au lieu d’effectuer une “vraie” redirection.
La meilleure pratique pour créer des redirections PHP consiste donc à spécifier le code qui est renvoyé. Malheureusement, le code correct à utiliser est un point de discorde. HTTP 301 indique une redirection permanente, ce qui peut vous causer des problèmes pour restaurer votre page d’origine. HTTP 303 est malheureusement compris comme “autre” par de nombreux navigateurs et peut causer des problèmes d’indexation de votre page par les moteurs de recherche.
En pratique, et jusqu’à ce que cette situation soit résolue, utilisez le HTTP 303.
Consultez la documentation
Outre les précautions de base ci-dessus, vous devriez prendre le temps de lire la documentation sur l’utilisation des redirections PHP avant de les publier. Vous devriez vérifier le manuel PHP pour vous assurer que vous comprenez ce que vous faites, ainsi que la documentation du W3C pour vous assurer que vous suivez les meilleures pratiques.
Et pendant que vous rattrapez votre retard de lecture, veillez également à protéger un site web contre les vulnérabilités courantes : si vous êtes déjà dans la position de devoir utiliser des redirections PHP, il est probable que la sécurité de votre site devra faire l’objet d’un audit.
Autres méthodes
Compte tenu de tous ces problèmes, vous vous demandez probablement pourquoi vous utiliseriez une redirection PHP. C’est une question tout à fait légitime. Bien que les redirections PHP soient généralement exécutées plus rapidement que les autres types de redirection, et peuvent donc être un outil important pour améliorer la vitesse des sites web, il existe d’autres options.
Il existe deux approches principales pour y parvenir. Vous pouvez soit utiliser l’élément HTML <meta> pour rediriger à partir de la partie HTML de votre page, soit utiliser JavaScript. La première approche, qui consiste à utiliser l’élément <meta>, se présente comme suit :
<meta http-equiv="refresh" content="0;url=newpage.php">
La deuxième méthode – utilisant JavaScript – est un peu plus élégante et semble certainement plus professionnelle :
window.location.replace("http://newpage.php/");
Ces deux méthodes sont un peu plus lentes qu’une redirection immédiate du header(), mais on peut dire qu’elles sont plus souples.
Un dernier mot
Si suivre les étapes ci-dessus devrait signifier que vos redirections PHP s’exécutent en toute sécurité, si vous êtes en mesure d’utiliser plusieurs redirections PHP, il est probablement temps de repenser la structure de votre site.
Il y a plusieurs bonnes raisons pour le faire. La première est que pas tous les hébergeurs web ne sont créés égaux, et si vous envoyez tous vos visiteurs sur un itinéraire détourné autour de votre site, cela va affecter ses performances. Il est possible d’améliorer cette situation dans une certaine mesure en faisant appel à un hébergeur web abordable, mais seulement dans une certaine mesure.
La deuxième raison est que la page à partir de laquelle vous redirigez pourrait recueillir des données sur vos visiteurs sans que vous en ayez conscience, en particulier si vous utilisez un logiciel d’analyse web pour suivre les performances de votre site. Dans notre monde après l’adoption de la directive sur la protection des données (GDPR), cela pourrait avoir des conséquences importantes.
Donc, en résumé : soyez prudent avec les redirections PHP, utilisez-les correctement et ne les utilisez que lorsque vous en avez absolument besoin.