web-dev-qa-db-fra.com

Puis-je compter sur l'en-tête HTTP Referer?

Puis-je compter sur Referer en-tête HTTP dans mon application Web? Je souhaite vérifier si l'utilisateur provient d'un domaine/d'une page Web particulier, et s'il l'a fait, puis modifier la mise en page de mon site en conséquence.

Je sais que les gens peuvent désactiver Referer dans leur navigateur. Des idées à quelle fréquence les utilisateurs font ça? Puis-je compter sur Referer dans 99% des cas?

37
bodacydo

En règle générale, vous ne devez pas faire confiance à l'en-tête du référent HTTP pour toute question importante, sauf pour une analyse statistique purement informative de qui sont vos visiteurs ou quand. la recherche de modèles de comportement parmi les utilisateurs de votre propre site.

En aucun cas, il est conseillé d'utiliser cet en-tête pour AAA (authentification, autorisation et comptabilité), sauf si, comme indiqué ci-dessus, vous envisagez de comptabiliser la simple analyse du trafic du comportement de votre visiteur.

L'énumération des faiblesses courantes répertorie cette faiblesse comme CWE-293: Utilisation du champ de référence pour l'authentification :

Le champ référent dans les requêtes HTTP peut être facilement modifié et, en tant que tel, n'est pas un moyen valide de vérification de l'intégrité des messages.

Voici d'autres raisons, plus spécifiques, de ne pas faire confiance à l'en-tête du référent:

  • En général, lors de la "liaison" à partir d'une connexion HTTP <-> HTTPS (TLS), la plupart des navigateurs Web standard n'informent pas cet en-tête.

  • Pour des raisons de confidentialité, de nombreux mandataires d'entreprise sont configurés pour supprimer/supprimer cet en-tête, donc même si un navigateur Web envoie cet en-tête, un logiciel de proxy d'entreprise peut le supprimer.

  • Dans la nature, les solutions de sécurité, les logiciels malveillants, les navigateurs intégrés aux applications ... sont connus pour modifier et/ou tricher sur le contenu de cet en-tête.

Attention:

  • Lors de la "liaison" de HTTPS à HTTPS, la plupart des navigateurs Web standard informent cet en-tête même lors du changement du nom de domaine ou de la destination de l'adresse réseau.
35
jose.angel.jimenez

Tant que vous avez un comportement par défaut raisonnable lorsqu'il n'y a pas de valeur utilisable et que vous ne faites rien de sensible en fonction de cela, c'est probablement correct.

Un utilisateur malveillant pourrait définir cet en-tête comme il le souhaite. Je m'attends à ce que la plupart des utilisateurs ne modifient pas le comportement par défaut de leur navigateur, il est donc probablement là et précis la plupart du temps.

Il y a probablement aussi des cas où le basculement entre HTTPS et HTTP empêchera l'envoi d'un en-tête de référent.

2
cpugeniusmv