★阿修羅♪ 現在地 HOME > 掲示板 > テスト9 > 132.html
 ★阿修羅♪
次へ 前へ
Refererリクエストヘッダって何 ? 何が問題になるの ?
http://www.asyura2.com/0502/test9/msg/132.html
投稿者 バルタン星人 日時 2005 年 1 月 28 日 23:10:35:akCNZ5gcyRMTo

参照スレ http://www.asyura2.com/0406/kanri7/msg/840.html
投稿のためには REFERRERを有効に 投稿者 管理人さん 日時 2005 年 1 月 27 日 23:02:13:Master

今回の件ですがWindowsでNorton使ってなくても、私の様にLocalに proxy
(キャシュサーバー )を立ててバナーを叩き落したり Redirectするついでに
header_access Referer deny all

している環境では OS、ブラウザに関係なく全部 Forbiddenで蹴られてしまいました。
それ以外でもRefererを送らないのがdefaultになっている環境もあると思います。
(自分が管理者ではないproxyを通してしか外に出られないとか)
別に悪いことをしようというのではありません。悪いことをされないようにということ
なのですが。で、ごにょごにょして FirefoxだけRefererを「任意」にAllowするように
しましたが、投稿したら元に戻します。

ブラウザからどんな情報が流出?しているかは
確認くん http://www.ugtop.com/spill.shtml
Envchecker http://www.cybersyndrome.net/evc.html/

等で見ることができます。(Apacheにおまけでついてくるenv.cgiみたなものですが
事故自己責任でお願いします。)

板荒し対策で、「up.cgiに直リン貼られたらタマラン」という理由でReferer
でのアクセス制限をとすれば以下にあるようにRefererの偽装が容易な
ことも留意する必要があります。.......どう偽装するのかって.......まあ、その
とにかく、よくわからないままで許可するのはcookieよりはるかに危ない
のではないでしょうか。

RFC(Request for Comment)って何?というなら
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html

RFC2616の 和訳もあります。

引用元http://www.st.ryukoku.ac.jp/~kjm/security/memo/referer.html

-------------------------------ここから引用 -------------------------------------


Refererリクエストヘッダって何 ?

fromRFC2616:Hypertext Transfer Protocol -- HTTP/1.1:

14.36 Referer

The Referer[sic] request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained (the "referrer",although the header field is misspelled.) The Referer request-header allows a server to generate lists of back-links to resources for interest, logging, optimized caching, etc. It also allows obsolete or mistyped links to be traced for maintenance. The Referer field MUST NOT be sent if the Request-URI was obtained from a source that does not have its own URI, such as input from the user keyboard.

 リンクをたどるときに、 「あなたのページをリクエストする前はこの URLを見ていました」 ということをクライアント (webブラウザ )からサーバに伝えるためのヘッダです。 Refererはリンクをたどるときにのみ出力されるため、 Refererの値を観察することにより「自分のページがどこからリンクされているのか」を知ることができます。


何が問題になるの ?

  fromRFC2616:Hypertext Transfer Protocol -- HTTP/1.1:

15.1.3Encoding Sensitive Information in URI's

Because the source of a link might be private information or mightreveal an otherwise private information source, it is strongly recommended that the user be able to select whether or not the Referer field is sent. For example, a browser client could have a toggle switch for browsing openly/anonymously, which would respectively enable/disable the sending of Referer and From information.

Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol.

 プライバシーや社内 (ファイアウォール内部 )情報の漏曳が発生します。 また webメールなど web上で提供されているサービスの中には Refererリクエストヘッダに含まれる情報を悪用されるとサービスを乗っ取られるなどの脆弱性を有するものがあります。適切に設計・実装されたサービスばかりが存在するなら問題ないのですが、実際には脆弱性を有するサービスは少なくないようです。
事例 : Cookieを使用せず URLに埋め込む ID に頼ったセッション管理方式の脆弱性 (1);REFERER情報取得による脆弱フリーメールサイトの乗っ取り問題

[JavaHouse-Brewers:33024]任意のホストに接続できてしまうセキュリティ上の欠陥がもたらす危険性

 さらに、ブラウザのバグのためにlinkされていないにもかかわらず Refererが流出してしまうことがあります。これも、悪用されるとプライバシー漏曳や社内情報の流出につながる恐れがあります。
事例 :Re:ブラウザの Referer<に関する異常動作


どうすればいいの ?

Refererリクエストヘッダを送信しないようにすればいいです。

ただし、相手側 webサーバが Refererリクエストヘッダに基づくサービスを提供している場合はRefererリクエストヘッダを送信しないようにすると動作不良が発生する可能性があります。

Refererリクエストヘッダの本来の目的は、RFC2616 TheReferer request-header allows a server to generate lists ofback-links to resources for interest, logging, optimized caching,etc. It also allows obsolete or mistyped links to be traced formaintenance とあるように、利用者のナビゲート支援にあります。 Refererに基づく高度なナビゲートを提供しているサイトでは、 Referer送信を停止するとナビゲートに支障が生じる可能性があります。

 また、おうおうにして Refererをアクセス制御に用いてしまうサイトがあります。たとえば Refererリクエストヘッダにある特定の値が設定されている場合にのみアクセスを許可する、というような形での利用です。具体的には、アクセスカウンターや web掲示板など CGIで提供されるサービスのかなりは Refererリクエストヘッダが特定の値 (カウンターや web掲示板を設置してある URL)となっていないと動作しないようです。このような方法は「カウンター荒らし」「掲示板荒らし」の対策として広く利用されているようなのですが、上記のように Referer/はいくらでも偽造可能なため、まじめな(?!)「荒らし」の対策にはならないということを理解する必要があります。

ただし、「荒らし」フォーム /リンクを設置した悪意ある webページに誘導するなどして、攻撃する意思のない一般ユーザに「荒らし」をさせる、などといったものに対しては、Refererによるチェックは一定の効果を持っていると考えられます。

セッション管理の脆弱性においても、 Referer:を用いた脆弱性回避方法が記述されています。

 あと、 webサーバ管理者は Refererをたよりにリンク元ページを検知している場合があります。 Refererがなくなるとこれが不可能になり困ると感じる人は少なくないようです。


Refererを削除する具体的な方法 ?

Mosaic L10N+
コンパイル時に SECUREを定義します。
lynx
-norefererオプションをつけて起動します。
w3m
Option Setting Panel で「 Referer: を送らないようにする」を ON [OK]を選択します。 w3mの再起動は必要ないです (from 関谷さん )
Netscape Communicator 4.x
prefs.js(UNIX なら $HOME/.netscape/preferences.js)をテキストエディタで編集し、user_pref("network.sendRefererHeader", false); という行を追加し、 Communicatorを再起動します。
参照 :上級者向け Communicator設定法
なお、志村さんから「 $HOME/.netscape/preferences.jsを書きかえても、netscapeが終了する時点で元に戻ってしまう」という現象が報告されています。 ja-netscape-communicator-4.61(FreeBSD 3.3-RELEASE), netscape-communicator-4.7 (LASER5 Linux 6.0)で発生するそうです。 小島の手元では発生しないのでよくわかりません。
岩本さんは、 Communicatorを起動したまま preference.jsを編集すると、Communicator終了時に上記現象が発生することを確認されたそうです。
2002.04.22追記
西川さんから、上記を行っても「 JavaScriptを有効にしていると JavaScriptの変数 document.refererに Referer情報がきっちり記録されている」との情報をいただきました。 Netscape6 (Mozilla) の場合は document.refererも無効になるそうです。
Netscape6.1 / Mozilla 0.9x
Windows98 の場合 C:\ProgramFiles\Netscape\Netscape 6\defaults\pref\all.js の pref("network.sendRefererHeader",2); という行を pref("network.http.sendRefererHeader",0);と変更します。 (from[memo:551])
あるいは、ユーザプロファイルにある pref.jsに user_pref("network.http.sendRefererHeader",0); と書きます。 (from [memo:826])

(※バルタン注:Firefoxなら手で書き換えるような危険な方法でなくpref.jsを操作できるPrefBarという拡張機能があります。)

squid
squid.confで設定します。
1.xでは http_anonymizerを設定します。 http_anonymizer standard あるいhttp_anonymizer paranoidで Refererが削除されます。
2.x では anonymize_headersを設定します。 たとえば、 anonymize_headersdeny Referer とします。 squid.confのコメントを参照してください。

(※バルタン注:このディレクティブはSquid-2.4.Xのものです。2.5STABLEでは書式が変わっています。)

上記では Refererが常に削除されてしまうため、 前記したように CGI関連で不具合が発生します。これを防ぐため、別ホストに移動する場合のみ Refererを削除するようにする patch <をたかださんが作成されています。 TeaRoom for Conferenceの No.238の議論も参照してください。
squid2.5 以降では、 acl を利用して特定の refererを送出しないようにできます。 たとえばこのように使います。
acl internal referer_regex ^http://[^/]+\.example\.co\.jp ^http://192\.168\. ^[a-zA-Z]:\\header_access Referer deny internal

DeleGate
次のようなcfiスクリプトをDGROOT/lib/killreferer.cfi に用意します。
#!cfiRemove/Referer:
その上で、 delegateの起動オプションに FTOSV=killreferer.cfiを指定することで Refererを削除できます。なお、この場合 FTOSV="data:,#!cfi%0ARemove/Referer:%0A"としてもよいです。 参照 :[DeleGate] Re: Referer リクエストヘッダの除去
WWWOFFLE
wwwoffle.confで以下のように記述すると Refererが特定の値になります :
CensorHeaderReferer = http://some.url.com
Referer= とすれば Refererを空にできます。
他にreferer-selfreferer-self-dirも利用できます。 詳細は wwwoffle.confのサンプルや man wwwoffle.conf を参照してください。
Junkbuster
Junkbusterはプライバシ強化が目的のproxyserverです。WindowsとUNIXで動作するようです。Refereを削除あるいは特定の値とするには、次のようにします :
# referer specifies treatment of the "Referer:" header
# default : Kill the referrer-header from the client
# . : Pass the referrer unchanged
# 'text' : Always send as the referrer
# @ : Pass the referrer if the server is in the cookie file,
# kill the referrer otherwise
referer 'http://www.google.com/'
Doorman@JUMPERZ.NET
Doorman@JUMPERZ.NETは Windows対応の「多目的 TCP/IPネットワークテストツール」です。 シェアウェア 5000円です。
Referrerの変更・削除については HTTPリクエストをカスタマイズするを参照してください。
Proxomitron-J
Windows 対応の「非常に柔軟なカスタマイズが可能」な proxyserver。 デフォルトの Referer書き換えは少年ナイフのオフィシャルサイトになっているそうです。関連記事 :Webブラウジングを快適にする「 The Proxomitron
Proxy伝説
どこを変えればいいのかは一目瞭然ですね。
インターネット快速便
from土居 @シャープさん :ネットワーク切り替え機能に Refererカットの有無を連動できるので、 あるネットワーク設定では Refererカット有り、他のネットワークではフリーパスという風にプライバシーのレベルを切り替えることができます。

この他のブラウザ、 proxyサーバに関する情報をお持ちの方はぜひおしえてください


SpecialThanks

 FWDfw-wizard ML のみなさん、Tea Room for Conference のみなさん、 セキュリティホール memoMLのみなさん、四方さん、関谷さん、金床さん、北條さん、なゆたさん、佐藤さん、土居さん、志村さん、岩本さん、高木さん、西川さん、山賀さん。

-------------------------------引用おわり -------------------------------------


 次へ  前へ

テスト9掲示板へ



フォローアップ:


 

 

 

 

  拍手はせず、拍手一覧を見る


★登録無しでコメント可能。今すぐ反映 通常 |動画・ツイッター等 |htmltag可(熟練者向)
タグCheck |タグに'だけを使っている場合のcheck |checkしない)(各説明

←ペンネーム新規登録ならチェック)
↓ペンネーム(2023/11/26から必須)

↓パスワード(ペンネームに必須)

(ペンネームとパスワードは初回使用で記録、次回以降にチェック。パスワードはメモすべし。)
↓画像認証
( 上画像文字を入力)
ルール確認&失敗対策
画像の URL (任意):
投稿コメント全ログ  コメント即時配信  スレ建て依頼  削除コメント確認方法
★阿修羅♪ http://www.asyura2.com/  since 1995
 題名には必ず「阿修羅さんへ」と記述してください。
掲示板,MLを含むこのサイトすべての
一切の引用、転載、リンクを許可いたします。確認メールは不要です。
引用元リンクを表示してください。