2011-05-09 5 views
14

J'utilise $ _SERVER ['HTTP_REFERER'] pour générer un lien arrière dynamique.

<a href="<?php echo $_SERVER['HTTP_REFERER'] ?>">Return to..blah</a> 

Est-il raisonnablement sûr de le faire?

+3

Sûr comme protégé contre les attaques XSS, ou sûr comme dans "contiendra toujours une valeur valide"? –

+0

REFERER n'est pas toujours présent, donc votre méthode ne fonctionnera pas dans certains cas. –

Répondre

14

Pas comme ça.

Peut ne pas être présent. (Il se peut que certains paquets de pare-feu cachent le référent pour des raisons de confidentialité, violant la spécification HTTP en cours de route)

Vous devez exécuter tout ce qui provient de l'extérieur de votre système via htmlspecialchars pour vous prémunir contre les attaques XSS (bien que, IIRC, le referer ne devrait jamais avoir de caractères dangereux car ils devraient être sûrs d'URL, vous devriez garder l'habitude de toujours être prudent). Les navigateurs viennent avec des boutons de retour, il n'est pas nécessaire d'essayer de dupliquer leurs fonctionnalités (surtout quand, avec ceci, si l'utilisateur clique sur un lien marqué "retour" il ne les reprend pas dans leur histoire, donc cliquer sur le bouton normal de retour les emmènera conceptuellement vers l'avant).

+1

Il peut ne pas être défini du tout, pas seulement vide. –

+0

Bon point, édité pour être plus clair. – Quentin

5

Il peut être sûr, mais il est pas fiable: en raison de la HTTP spec, HTTP_REFERER est facultative (certains clients n'envoient pas cet en-tête du tout, et quelques bandes de logiciels « de sécurité » ceci de toute requête HTTP), et il existe de nombreuses façons de modifier cet en-tête. Certains navigateurs envoient la page de renvoi, d'autres envoient une chaîne vide, d'autres n'envoient pas du tout, d'autres peuvent envoyer des données fausses, d'autres peuvent envoyer Tante Mathilde; et de plus, vous ne pouvez pas dire si vous obtenez des données valides dans cet en-tête ou non.

Donc, non, je ne ferais jamais confiance que HTTP_REFERER contient la page précédente, et vous non plus.

+1

+1 J'ai eu le premier fichier référencé dans le dernier ensemble de pages HTML demandé comme référant plusieurs fois, généralement 'favicon.ico' ou un fichier css. Cela est arrivé dans Firefox et Chrome. –

2

Ce n'est pas le cas. Il peut ne pas être défini, indésirable ou même dangereux.

concider les éléments suivants:

  1. types d'utilisateurs dans votre URL et visites vont. Il n'y aura pas de référent. Non seulement votre bouton de retour ne fonctionnera pas, mais vous recevrez également une erreur de notification.
  2. Le visiteur provient d'une source externe (disons google) sur votre page produit. voulez-vous renvoyer votre visiteur sur google? Je ne pense pas.
  3. L'en-tête peut être modifié, j'irais soit pour le vérifier, soit ne pas l'utiliser du tout.
Questions connexes