web-dev-qa-db-ja.com

HTTPリファラーを削除する

リクエストヘッダーのhttpリファラー情報を削除または非表示にする方法ですか?おそらくjavascript pythonまたはDjangoのスクリプトを使用して他のサイトにアクセスするユーザーのhttpリファラー情報を削除したい

例:

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
50
shiva

2015年の時点で、これがRefererヘッダーの送信を防ぐ方法です:

これをWebページのheadセクションに追加するだけです:

 <meta name="referrer" content="no-referrer" />

これはリンクとAjaxリクエストの両方で機能します(---)ページ上のJavaScriptコードによって作成されます。

その他の有効なmetaオプションは次のとおりです。

<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" />

•ブラウザで動作するかどうかは、こちらで確認してください。 http://caniuse.com/#feat=referrer-policy

•ここの仕様を参照してください: http://w3c.github.io/webappsec/specs/referrer-policy/

また、ブラウザはOriginヘッダーを送信することに注意してください(CORSリクエストとPOSTリクエストを含む、こちらを参照してください: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin )これにはドメインとポートが含まれ、私の知る限り削除できません。<meta name="referrer" content="Origin" />を使用する場合、リファラーにはOriginヘッダー。ユーザーの現在のページを非表示にするため、プライバシーの観点からはすでに有効です。

更新:

JavaScriptのみを使用してリファラーを削除する場合は、Ajaxリクエストを行う直前に適切なメタタグを動的に追加できます。このJavaScriptは<meta name="referrer" content="no-referrer" />をWebページのheadセクションに追加します:

var meta = document.createElement('meta');
meta.name = "referrer";
meta.content = "no-referrer";
document.getElementsByTagName('head')[0].appendChild(meta);
99
MarcG

Javascriptにはクロスブラウザソリューションがあります。動的に作成されたIframesを使用し、 概念実証 をチェックします(免責事項:この目的のためにコーディングした小さなJSライブラリを使用します)。

10
jpgerek

完全なURLの非表示にのみ関心があり、ドメイン名を公開したままにしたい場合は、この小さなJavascriptコードが機能します。

ユーザーはexample.com/secret_url_we_want_to_hideにいます。ユーザーはgoogle.comに送信することになっているリンクをクリックします。しかし<a href="http://google.com">Go to Google</a>の代わりに、これを使用します:

a href="http://example.com/redirect.html#http://google.com">Go to Google</a>

/redirect.htmlは次を含むHTMLページです:(編集:アップデートをご覧ください!)

<html><head></head><script>
window.location.replace(location.hash.substring(1));
</script></html>

Google.comでは、リファラータグにhttp://example.com/redirect.htmlが表示され、実際のexample.com/secret_url_we_want_to_hideは表示されません。

UPDATE:

Firefoxには、location.hashを持つ bug があり、回避策は次のとおりです。

<html><head></head><script>
workaround_hash=location.href.split('#').splice(1).join('#');
window.location.replace(workaround_hash);
</script></html>
5
Hello World

使用するブラウザのバージョンに応じて、それを行うためのさまざまなメカニズムがあります。どのブラウザでも、宛先がHTTP経由の場合、HTTPSページにリダイレクトしてターゲットページにナビゲートすることにより、Originを「洗濯」できます。

IEの場合、JavaScript(window.openなど)を使用してナビゲーションを実行できます。これにより、リファラーが抑制されます。または、META Refreshを使用することもできますが、それにはパフォーマンスコストがかかります。 WebKitベースのブラウザーについては、NoReferrer LINK RELオプションを参照してください。 http://www.webkit.org/blog/907/webkit-nightlies-support-html5-noreferrer-link-relation/

4
EricLaw

私は同様の解決策を探していましたが、リファラーを空白にしましたが、参照元のウェブサイトからのユニークな訪問のみをカウントしていました。私が抱えていた問題は、誰かが特定のリンクから私のサイトを訪れた場合、訪問カウンターが上がることでしたが、その人がページを更新した場合、訪問者カウンターはまだ上がっていました。

Googleを使用してこのトピックに関するいくつかのリソースにアクセスしました。はい、誰かがphp.netで解決策を調べるように指示されるまで、答えを見つけるのは非常に困難でした。

私は使用して解決策を見つけました

header('Refresh: 0; url=index.php');

しかし、上記のコードだけでは解決策ではありません。解決策はその配置にあります。完全なコードは次のとおりです。

$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

「更新」後、ヘッダー情報はホストサイトの情報に変更されるため、ページの更新時に「if」ステートメントは検証されず、ヒットカウンターは増加しません。

IFブロック内にヒットカウンターを配置できます。また、ウェブサイトへの空白ヒットを記録するさまざまなパラメーターと、すべてのページロード/ページビューを記録するさまざまなパラメーターをプログラムすることもできます。

それが役に立てば幸い.....

1
Sumit

JavaScriptを介してRefererヘッダーにアクセスすることは想定できません。 httpのUser-Agentヘッダーと同様に、javascriptからrefererなどにアクセスすることはできません。これらのヘッダーへの値は、ブラウザーによって供給されます。あなたができることは、あなたがそうする必要がある場合、いくつかのトリッキーな回避策です。

0
nibin012

history.replace()method を使用して、http://example.com/search?q=100 と置換する http://example.com/search、次の方法で実行できます。

history.replace(null,null,'search')

お役に立てれば! :D

0
Jack Chen
<meta name="referrer" content="no-referrer"/>

上記のコードをページに配置すると、すべての発信リンク(ユーザーのクリック)はリファラー情報を送信しません

ドキュメント

0
Jyoti Sandhiya