2つのサイトがあります。
http://www.site1.com
http://www.site2.com
http://www.site1.com
にはhttp://www.site2.com
へのリンクが含まれています
<a href="http://www.site2.com/">link<a/>
ユーザーがhttp://www.site1.com
からのリンクをクリックすると、ブラウザはRefererヘッダーをhttp://www.site2.com
に送信します。リファラーヘッダーに基づいて、http://www.site2.com
はいくつかのプロセスを実行します。
(多分JavaScript、PHPなどで)偽造/変更できるかどうか疑問に思いますリファラーヘッダーまたはそれをまったく送信しないのですか?
Referer
ヘッダーを制御する2つの状況があります。ちなみに、Referer
はWordの「リファラー」のスペルミスです。
お使いのブラウザを制御してReferer
をsite2.com
に渡さないようにしたい場合は、多くのブラウザ拡張機能を使用できます。
他の状況は、あなたがwebmasterであり、-あなたのサイトのユーザー(site1.com)がReferer
を他のリンクされたサイトに送信しないようにする場合ですあなたのサイトで。複数の方法でそれを行うことができます:
Referer
to HTTPリンクを渡さないようにします。ただし、ページのリンクがHTTPSを使用している場合、Referer
は、以下で説明する他の方法で明示的にオフにしない限り、引き続き渡されます。rel="noreferrer"
属性を使用します。すべての主要なブラウザで supported です。<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL='http://site2.com/'"></html>'>Link text</a>
。Referer
を非表示にします。このタイプのリダイレクトは、潜在的に悪意のあるリンクがReferer
を使用して情報(たとえば、クエリ文字列のセッションID)を取得するのを防ぐためによく使用されます。多くの大規模なコミュニティWebサイトでは、外部リンクにリンクリダイレクトを使用して、アカウント情報を盗むために使用される可能性のある悪用の可能性を減らし、ユーザーがサービスを離れるときにそれを明らかにして、効果的なフィッシングの可能性を減らします。PHPでの単純なリダイレクトの例を次に示します。
<?php
$url = htmlspecialchars($_GET['url']);
header( 'Refresh: 0; url=http://'.$url );
?>
<html>
<head>
<title>Redirecting...</title>
<meta http-equiv="refresh" content="0;url=http://<?php echo $url; ?>">
</head>
<body>
Attempting to redirect to <a href="http://<?php echo $url; ?>">http://<?php echo $url; ?></a>.
</body>
</html>
2015年現在、これはWebサイトがリファラーヘッダーを送信しないようにする方法です。
これをWebページのヘッドセクションに追加するだけです。
<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/
注: JavaScriptのみを使用してリファラーを削除する場合は、Ajaxリクエストを行う直前に適切なメタタグを動的に追加できると思います。ただし、これはテストしていません。
また、ブラウザはドメインとポートを含むOrigin
ヘッダーを送信するようになりました。私の知る限り、削除することはできません。 <meta name="referrer" content="Origin" />
を使用する場合、リファラーにはOrigin
ヘッダーと同様の情報が含まれます。これは、ユーザーの正確なページを隠すため、プライバシーの観点からはすでに優れています。
呼び出し元のクライアントを制御しない限り、リファラーヘッダーを変更することはできません。ブラウザ。
ブラウザはリファラーの変更をブロックします。サーバーからクライアントにヘッダーを取得する方法がないため、サーバー側のコードはリクエストにヘッダーを挿入できません。また、クライアントに次のリクエストのリファラーヘッダーにヘッダーを挿入させることができます。
ただし、ブラウザにはJavaScriptからのヘッダーインジェクションに関する特定の脆弱性がないことが前提となっています。
pythonスクリプト( http://docs.python-requests.org/en/latest/ を参照)を書いて、標準のurllibが見える場合、複雑ですが、FirefoxのTamper data/live httpヘッダープラグインを使用してリファラーを偽装できると思います。確かではありませんが、見てください。リファラーヘッダーを操作できる他のfirefoxアドオンもあります。 Firefoxアドオンのリファラー。
紹介問題とその履歴の優れた概要は、 "楽しさと利益のために紹介者を取り除く" にあります。
同じ記事には、以下への優れたリンクも含まれています。
<iframe src=about:blank>
騙す。HTTPヘッダーを作成することは難しくありません。
ターミナルとnetcat
(cat
(ネットワーク上)。
次のように:
nc << eof www.site2.com 80
GET /somepath/somedest HTTP/1.0
Host: wwww.site2.com
Referer: wwww.site1.com
.
eof
十分かもしれません。
(注:ドット.
末尾の意味はありませんが、空行はヘッダーの終わりを示します)
したがって、答えはyes HTTPヘッダーを偽造することが可能です。
これはFirefox 19.0で行われました
hidingリファラーフィールドの場合、数年前からsquid
プロキシサーバーでオプションを使用しましたが、ブラウザ用のモジュールまたは拡張機能が存在する必要があると確信していますトリックをします...
... Firefox(v19.0)の設定をざっと見てみると、オプションがあることがわかります:network.http.sendRefererHeader
。
このオプションは次のように設定できます。
0
Refererヘッダーを送信したり、document.referrerを設定したりしないでください。1
リンクをクリックしたときにRefererヘッダーを送信し、次のページのdocument.referrerを設定します。2
(デフォルト)リンクをクリックするか、画像をロードするときに、Refererヘッダーを送信し、次のページのdocument.referrerを設定します。