web-dev-qa-db-fra.com

HttpServletRequest - Comment obtenir l'URL de renvoi?

Je dois consigner les URL qui mènent à mon site dans un Java Servlet.

139
shane

Il est disponible dans le HTTP referer header . Vous pouvez l'obtenir dans une servlet comme suit:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.

Cependant, vous devez comprendre que cette valeur est contrôlée par le client et peut donc être usurpée pour quelque chose de complètement différent, voire supprimé. Ainsi, quelle que soit la valeur renvoyée, vous ne devez pas l’utiliser pour des processus métier critiques dans le back-end, mais uniquement pour le contrôle de la présentation (masquer/afficher/modifier certaines parties de la présentation, par exemple) et/ou des statistiques.

Pour les intéressés, des informations sur les fautes d’orthographe peuvent être trouvées dans Wikipedia .

295
BalusC

En fait, c’est: request.getHeader("Referer"), ou mieux, et pour être sûr à 100%, request.getHeader(HttpHeaders.REFERER), où HttpHeaders est com.google.common.net.HttpHeaders

24
wpodgorski

Les URL sont passées dans la requête: request.getRequestURL().

Si vous voulez dire d'autres sites qui vous lient? Vous voulez capturer le référent HTTP, ce que vous pouvez faire en appelant:

request.getHeader("referer");
16
Chris K

Comme tous l’ont mentionné, c’est

request.getHeader("referer");

Je voudrais ajouter quelques détails supplémentaires sur l’aspect sécurité de l’en-tête du référent par opposition à la réponse acceptée. Dans le projet de sécurité des applications Web ouvertes ( [(~ ~ ~ ~] owasp [~ # ~] ), aide-mémoire, sous aide-mémoire de prévention de falsification de requêtes inter-sites (CSRF) , il est mentionné sur l’importance de l’en-tête du référent .

Plus important encore pour cette vérification recommandée de la même origine, un certain nombre d'en-têtes de requête HTTP ne peuvent pas être définis par JavaScript car ils figurent dans la liste des en-têtes "interdits". Seuls les navigateurs eux-mêmes peuvent définir des valeurs pour ces en-têtes, ce qui les rend plus fiables, car aucune vulnérabilité XSS ne peut être utilisée pour les modifier.

La vérification de l'origine d'origine recommandée ici s'appuie sur trois de ces en-têtes protégés: Origine, Référent et Hôte, ce qui en fait une défense CSRF assez puissante à elle seule.

Vous pouvez vous référer à Liste des en-têtes interdits ici . L'agent utilisateur (c.-à-d. Navigateur) a le contrôle total sur ces en-têtes et non sur l'utilisateur.

6
Don D