Est-ce un moyen de supprimer ou de masquer les informations de référent http dans l'en-tête de la demande? Je veux supprimer les informations de référence http des utilisateurs qui se rendent sur un autre site de mon site à l'aide d'un script, éventuellement en javascript python ou Django
exemple:
Host slogout.espncricinfo.com
User-Agent Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection keep-alive
Referer http://slogout.espncricinfo.com/index.php?page=index&level=login
A partir de 2015, vous empêchez l'envoi de l'en-tête Referer:
Ajoutez simplement ceci à la section head de la page Web:
<meta name="referrer" content="no-referrer" />
Cela fonctionne à la fois pour les liens et pour les requêtes Ajax effectuées par le code JavaScript sur la page.
Les autres options meta
valides incluent:
<meta name="referrer" content="unsafe-url" />
<meta name="referrer" content="Origin" />
<meta name="referrer" content="no-referrer-when-downgrade" />
<meta name="referrer" content="Origin-when-cross-Origin" />
• Voir si cela fonctionne pour votre navigateur ici: http://caniuse.com/#feat=referrer-policy
• Voir les spécifications ici: http://w3c.github.io/webappsec/specs/referrer-policy/
Notez également que les navigateurs envoient maintenant l'en-tête Origin
(avec les demandes CORS et POST, voir ici: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ Origin ) qui inclut le domaine et le port et, pour autant que je sache, ne peut pas être supprimé. Si vous utilisez <meta name="referrer" content="Origin" />
, le référent contiendra des informations similaires à celles de l'en-tête Origin
, ce qui est déjà utile du point de vue de la confidentialité, puisqu'il masquera la page exacte dans laquelle se trouve l'utilisateur.
Mettre à jour:
Si vous souhaitez supprimer le référent à l'aide de JavaScript uniquement, vous pouvez ajouter dynamiquement la balise méta appropriée juste avant d'effectuer la demande Ajax. Ce JavaScript ajoutera <meta name="referrer" content="no-referrer" />
à la section de tête de la page Web:
var meta = document.createElement('meta');
meta.name = "referrer";
meta.content = "no-referrer";
document.getElementsByTagName('head')[0].appendChild(meta);
Il existe une solution multi-navigateur en Javascript, elle utilise Iframes
créée dynamiquement, vérifiez un preuve de concept (disclaimer: il utilise un peu de JS lib que j'ai codé à cette fin).
Si vous souhaitez uniquement masquer l'URL complète et que vous gardez votre nom de domaine exposé, ce petit code Javascript fait le travail.
Votre utilisateur est à example.com/secret_url_we_want_to_hide
, votre utilisateur clique sur un lien qui est censé les envoyer à google.com
. mais au lieu de <a href="http://google.com">Go to Google</a>
, nous utilisons ceci:
a href="http://example.com/redirect.html#http://google.com">Go to Google</a>
Où /redirect.html
est une page HTML contenant les éléments suivants: .__ (Édition: voir la mise à jour!)
<html><head></head><script>
window.location.replace(location.hash.substring(1));
</script></html>
Google.com verra http://example.com/redirect.html
dans la balise de référent et ne verra jamais le example.com/secret_url_we_want_to_hide
réel.
METTRE À JOUR:
Firefox a un bug avec location.hash, la solution de contournement est la suivante:
<html><head></head><script>
workaround_hash=location.href.split('#').splice(1).join('#');
window.location.replace(workaround_hash);
</script></html>
Différents mécanismes permettent de le faire, en fonction de la version du navigateur que vous utilisez. Pour tous les navigateurs, si la destination est sur HTTP, vous pouvez "blanchir" l’Origine en redirigeant vers une page HTTPS qui navigue ensuite vers la page cible.
Pour IE, vous pouvez effectuer la navigation en utilisant JavaScript (par exemple, window.open), ce qui supprimera le référant. Vous pouvez aussi utiliser META Refresh, mais cela coûte un peu plus cher. Pour les navigateurs WebKit, voir l’option NoReferrer LINK REL: http://www.webkit.org/blog/907/webkit-nightlies-support-html5-noreferrer-link-relation/
Je cherchais une solution similaire, en blanc le référant, mais seulement pour compter les visites uniques d’un site Web référent. Le problème que j'avais était que, si quelqu'un visitait mon site à partir d'un lien particulier, le compteur de visites augmenterait, mais si cette personne actualisait la page, le compteur de visiteurs se levait toujours.
J'ai utilisé google pour visiter plusieurs ressources sur ce sujet et oui, il était très difficile de trouver la réponse tant que personne ne m'a demandé de consulter php.net pour la solution.
J'ai trouvé la solution en utilisant
header('Refresh: 0; url=index.php');
Mais le code ci-dessus n'est pas la solution. La solution réside dans son placement. Voici le code complet:
$ref=@$_SERVER[HTTP_REFERER];
$domain = parse_url($ref, PHP_URL_Host);
If ($domain === "google.com")
{
header('Refresh: 0; url=index.php'); //Resets header info to Host site so that on page refresh, the hit counter does not
} // increase but increases only when someone visits from google url again
Après le "rafraîchissement", les informations d'en-tête deviennent celles du site hôte. Par conséquent, sur la page, l'actualisation de l'instruction "if" ne sera pas validée et le compteur d'accès n'augmentera pas.
Vous pouvez placer votre compteur de coups à l'intérieur du bloc IF. Vous pouvez également programmer différents paramètres pour enregistrer les hits vierges sur votre site Web et différents paramètres pour vous connecter également à toutes les pages/pages vues.
J'espère que ça aide.....
Votre hypothèse d'accès à l'en-tête de référent via javascript n'est pas possible. Tout comme l'en-tête User-Agent dans http, référent, etc., n'est pas accessible en javascript. Les valeurs de ces en-têtes sont fournies par le navigateur. Ce que vous pouvez faire est un travail délicat autour de vous si vous en avez besoin.
Une autre méthode utilise la méthode history.replace () pour masquer la chaîne de requête, par exemple si vous souhaitez remplacer http://example.com/search?q=100
par http://example.com/search
, procédez comme suit:
history.replace(null,null,'search')
J'espère que cela aide! : D
<meta name="referrer" content="no-referrer"/>
Si vous mettez le code ci-dessus sur votre page, tous les liens sortants (clics de l'utilisateur) n'enverront pas d'informations sur le parrain