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?
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:
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.