web-dev-qa-db-fra.com

Dans quels cas HTTP_REFERER sera-t-il vide?

Je sais qu'il est possible d'obtenir un HTTP_REFERER vide. Dans quelles circonstances cela se produit-il? Si j'en reçois un vide, est-ce que cela signifie toujours que l'utilisateur l'a changé? Est-ce qu'obtenir un vide équivaut à en obtenir un nul? et dans quelles circonstances puis-je l'obtenir aussi?

143
sameold

Il sera/peut être vide lorsque l'utilisateur final

  • entré l'URL du site dans la barre d'adresse du navigateur.
  • visité le site par un signet géré par le navigateur.
  • visité le site en tant que première page de la fenêtre/onglet.
  • cliqué sur un lien dans une application externe.
  • basculé d'une URL https à une URL http.
  • basculé d'une URL https vers une autre URL https.
  • a un logiciel de sécurité installé (antivirus/pare-feu/etc.) qui supprime le référent de toutes les demandes.
  • est derrière un proxy qui supprime le référent de toutes les demandes.
  • visité le site par programmation (comme, curl ) sans définir l’en-tête du référent (searchbots!).
243
BalusC

HTTP_REFERER - envoyé par le navigateur, indiquant la dernière page consultée par le navigateur!

Si vous faites confiance à [HTTP_REFERER] pour une raison importante, vous ne devriez pas, car il peut être simulé facilement:

  1. Certains navigateurs limitent l'accès afin de ne pas autoriser le transfert de HTTP_REFERER
  2. Tapez une adresse dans la barre d'adresse ne passera pas le HTTP_REFERER
  3. ouvrir une nouvelle fenêtre de navigateur ne passera pas HTTP_REFERER, car HTTP_REFERER = NULL
  4. a un addon de navigateur qui le bloque pour des raisons de confidentialité. Certains pare-feu et AV font à.

Essayez cette extension firefox, vous pourrez définir les en-têtes de votre choix:

@Master of Celebration:

Firefox:

extensions:refspoof , refontrol , modifier les en-têtes , no-referer

Complètement désactiver: l'option est disponible dans about: config sous "network.http.sendRefererHeader" et vous souhaitez définir cette valeur sur 0 pour désactiver le passage de référent.

Google chrome/Chrome:

extensions:noref , spoofy , renvoi externe

Complètement désactiver: Changez de fichier ~/.config/google-chrome/Par défaut/Préférences ou ~/.config/chrome/Par défaut/Préférences et définissez ceci:

{
   ...
   "enable_referrers": false,
   ...
}

Ou ajoutez simplement --no-referrers au raccourci ou en cli:

google-chrome --no-referrers

Opera:

Complètement désactiver: Paramètres> Préférences> Avancé> Réseau, et décochez "Envoyer les informations sur le référent"

Web service d'usurpation d'identité:

http://referer.us/

proxy de filtrage autonome (usurper tout en-tête):

Privoxy

Usurper http_referer lors de l'utilisation de wget

'--Referer = url'

Usurper http_referer lors de l'utilisation de curl

-e, --ferer

Usurpation de http_referer avec telnet

telnet www.yoursite.com 80 (press return)
GET /index.html HTTP/1.0 (press return)
Referer: http://www.hah-hah.com (press return)
(press return again)
30
ThatGuy

La liste de BalusC est solide. Une autre manière pour laquelle ce champ semble souvent vide est lorsque l'utilisateur est derrière un serveur proxy. Cela ressemble à être derrière un pare-feu mais est légèrement différent donc je voulais le mentionner pour des raisons de complétude.

9
Night Owl

Il sera également vide si le nouveau projet de norme de la politique de renvoi est utilisé pour empêcher que l'en-tête du référent soit envoyé à la demande Origin. Exemple:

<meta name="referrer" content="none">

Bien que Chrome et Firefox aient déjà implémenté une version préliminaire de la politique de référencement, vous devez être prudent, car par exemple Chrome attend no-referrer au lieu de none (et j’ai aussi vu never quelque part).

6
Joel Richard

J'ai trouvé l'implémentation du navigateur référent vraiment incohérente.

Par exemple, un élément d'ancrage avec l'attribut "download" fonctionne comme prévu dans Safari et envoie le référant, mais dans Chrome, le référent sera vide ou "-" dans les journaux du serveur Web.

<a href="http://foo.com/foo" download="bar">click to download</a>

Est cassé dans Chrome - aucun référent envoyé.

0
jmoz