* Referer と Referrer - Referer は referrer の typo だけど、もはや直しようがない。 - [[JavaScript]] なんかは [[HTTP]] の referer (相当)を正しく referrer と呼んでいたりする。 - [42] [CODE(JS)[document.referrer]] - [45] >>42 [[DOM0]] * 変な Referer - [30] ''http://inazuma/content?[VAR[...]]'' という Referer 値が引っかかることがあります。検索してみると Referer log は大量にかかります。 が、 inazuma の正体に触れた情報はほとんどありません。 - [31] ''http://inazuma/*とは?'' で同じように疑問が呈されていて、正体の'''可能性'''のあるものが書いてあります。 検索系の串っぽいです。 - [32] それにしても、[[完全修飾ドメイン名]]でない値を送るなんて [[UA]] もどうかしてます。 ([[WinIE]] だろうか。) - [33] [WEAK[2002-12-17 (火) 14:59]] ''[[Name_Not_Found]]'': - [44] ''Proxomitron-J / 少年ナイフの Referer について'' : 作者の好きな URI を必ず Referer にしていたソフトウェアの例。その URI の使用者の側に迷惑をかけたからその仕様はやめたらしい。 - [51] [CODE(HTTP)[ [unknown origin] ]] - [59] >>51 は一部の[[防火壁]][[串]]が元あった Referer を削除して代わりに書き加えるみたいです。 - [61] 壊れた[[検索円陣]]索引付け器は適当な整数値を [CODE(HTTP)[Referer:]] で送りつけてくることがあるそうです。 [[#comment]] ** 栞 [5] 栞から辿った場合に、 "Referer: bookmarks" をつける [[UA]] があるみたいです。 ([[User-Agent:欄]]の値: "Mozilla/4.7 [ja] (Macintosh; U; PPC)") - [55] 最近の [[Mozilla]] は[WEAK[いつからかしりませんが]]栞の項目の設定画面で、その栞を挟んだ [[URI]] を参照するときに使われる [CODE(HTTP)[Referer]] の値が設定できるみたいです。 [[#comment]] ** Referer 漏れ [3] [[IE]] で、特定の条件でリンクを辿っていないのに閲覧した無関係の [[URI]] が送られることがある。 [57] 同じような Referer 漏れに見える、 2種類の現象があります。 - Referer は送られない様に設計されているはずなのに、なぜか条件が揃うと送られてしまう — 90年代後半に幾つかのブラウザで見つかったバグ。 - 何も考えてないので、よく考えれば (あるいは現在の価値観からすれば) 送らないで欲しいのだけど、 そのブラウザの仕様上「正しく」 送られてしまう — 90年代中頃までに幾つかのブラウザに見られた状況。 [4] 古い [[NetscapeNavigator]] でも起こったようです。 - [10] [WEAK[2002-11-21 (木) 19:12]] ''[[Name_Not_Found]]'': この wiki のあちこちで、(現時点では) 絶対ありえない の referer が観測されておるのだが・・・ - [22] [CODE[MosaicView/2.0009 Win32 NEC/9]] という太古(1996)の [[Mosaic]] variant は、リンクをたどっていないにもかかわらず直前の [[URI]] を送ります。しかもそれが [[file:]] URI でもお構いなく。 - [23] [WEAK[2002-12-06 (金) 16:05]] ''[[Name_Not_Found]]'': MosaicView/2.0009 Win32 NEC/9 [56] >>22 Mosaic Netscape 0.9 もそんなもんです。 古い時代は今とは違った privacy 感覚でしたから。。。 - [24] [WEAK[2002-12-13 (金) 18:39]] ''>>10'': どっかの糞 UA または privacy を謳う串の類が、適当にそこのサーバーのルートを Referer として送ってくるんじゃないか? だれか検証してみてくれ。 - [41] >>3- の Referer 漏れとちょっと趣が異なりますが、 [[JavaScript]] の [CODE[location.href]] を使って飛んだ場合に、 [[UA]] によっては Referer が送られます。普通は問題ないのですが、この JavaScript が [[Bookmarklet]] だった場合で、例えば利用者に入力を求めてその入力に従って移動するようなものであったら、全く関係ない URI が Referer として送られてしまうことになります。 ([[Mozilla]] とかでなります。送られるのは [[javascript:]] ではなくて既に表示されている URI なんですね) [68] [CITE[スラッシュドット ジャパン | EZwebブラウザに不正なReferer送出を行う不具合]] ([[名無しさん]] [WEAK[2005-12-10 03:12:19 +00:00]]) [69] [CITE[JP Vendor Status Notes]] ([[名無しさん]] [WEAK[2005-12-10 03:19:09 +00:00]]) [[#comment]] ** 参考 - (IE の Referer 漏れについての話) - [43] ''Re:'' - [60] ''Get Rid Of The Turkeys Who Use'' : 種々の UA が送ってくる Referer の形式的分類がありまして、参考にさせていただいています。 [[#comment]] * Referer による接続制御 [1] Referer: 欄の値により、接続制御することがあります。 例えば画像資源において、 Referer: 値が自分のサーバー内を指すものと思われないときには資源を渡さないという方法は良く使われます。 しかしこの方法は Referer を返さない[[利用者エージェント]]に対しては正しく動作しない可能性が強いですし、そうでなくても World Wide Web の最大の特徴の一つである[[ハイパーリンク]]に対して著しく不利益を与えるものです。 ですから、 Referer による接続制限は、それによる影響を十分に理解した上で、どうしても必要な場合においてのみ行うように、慎重に検討する必要があります。また、その場合においても Referer を返さない[[利用者エージェント]]に対して不利益がないように十分考慮しなければならないでしょう。 (Referer を返す [[UA]] でご利用下さい、はそれだけで既に不利益です。) [2] なお、 Referer は [[HTTP]] において必須の欄ではありません。プライバシーの観点から値を与えない実装も数多く存在します。 [[#comment]] * Referer による逆リンク作成 [66] Referer 情報は鯖側で様々な用途に利用できますが、仕様書 ([[RFC 2616]]) にも言及がある代表的な使用例の一つが[[逆リンク]]一覧の作成です。 Referer 情報を見ることにより、 ある[[資源]]に関する言及の所在をその[[資源]]の[[著者]]が容易に発見できます。 [67] Referer 情報は閲覧者が直前に何を見ていたかの情報であり、 ともすればプライバシーの問題にもなりかねません。 [[RFC 2616]] は[[利用者エージェント]]に、[[利用者]]が referer 情報を送信するかどうかを選択できることを求めています。 Referer 情報を逆リンクなどの形で公表されたとしても、 閲覧者がそれを[[著者]]に抗議したり、 不快感を示したりするのはお門違いです。 [[#comment]] * いつ Referer を送るか [11] Referer: 欄に値を入れて送る場合には、例えば次の場面があり得ます。 - [12] ハイパーリンクを順方向に辿る場合 -- ([CODE(HTML)[[[a]]]], や [CODE(HTML)[[[link]]]], [[XLink]] の[[単純リンク]]など) - [14] ブラウザの項目などから飛ぶ場合 (>>5 も参照) - [15] [[UA]] の機能によるハイパーリンクから飛ぶ場合 -- (文書中の [[URI]] を押した場合とか。) -- ([[WinIE]] の[[スマートタグ]]のような仕組みとか。) - [13] 埋め込み資源を取り寄せる場合 -- (画像, [[スタイル・シート]], [[スクリプト]]など) -- [39] [CODE(HTML)[[[frameset]]]]/[CODE(HTML)[[[frame]]]] とか [[XFrames]] とか。 - [37] 入力欄の値を送信する場合 -- ([CODE(HTML)[[[form]]]], [[XForms]] など) [[#comment]] [16] どういう時に Referer URI を送るかは、実装依存です。 (サーバー側は何らの仮定もするべきではありません。) ただ常識的に考えて、 Referer を送る場合は >>12 は必須でしょう。 - [9] [[Mozilla]] では、 ''user_pref("network.http.sendRefererHeader", 0/1/2);'' で Referer を送るか制御できます。 0 で不送信, 1 でリンクを辿った時送信, 2 で1に加えて埋め込み画像などの取得にも送信で、 2 が既定値です。 - [38] [SAMP[html]] が [SAMP[css1]] を参照していて、 [SAMP[css1]] が更に [SAMP[css2]] を参照しているとします。この時、 [SAMP[css1]] と [SAMP[css2]] のどちらを取り寄せる時にも [SAMP[html]] の URI を送る UA があります (具体的には [[WinIE]])。しかしこれはおかしいと思われます。 [63] フレームとしてのリンク ([CODE(HTMLe)[[[frame]]]]) は実際に UA によって [CODE(HTTP)[[[Referer:]]]] を送ったり送らなかったりするようです。 ([[名無しさん]] [sage] [WEAK[2005-02-03 23:22:24 +00:00]]) [[#comment]] ** どういうときに Referer を送らないか [17] 利用者のプライバシーを考えつつも、分析目的の Referer 情報をサーバーに提供するために、例えば次のような実装が考えられます。 - [18] 同じサーバーの URI なら送信する。 - [19] 特定の{サーバー|種類(scheme)}の URI なら送信{する|しない}。 - [20] 例えば検索円陣の URI は送信しないで欲しい、 のような利用者の要望に応えられる実装が望ましいでしょう。 - [34] [WEAK[2002-12-17 (火) 15:01]] ''[[Name_Not_Found]]'': >>32 のように、 [[FQDN]] 以外を参照する [[URI]] は送信するべきではないでしょう。 Private などの[[特殊-IPv4-address]], [[特殊IPv6アドレス]]も同様。 - [46] [CODE(URI)[[[https:]]]] な世界から [CODE(URI)[[[http:]]]] な世界に移るときに Referer が送られるのを気にする人もいます。多分本質的には気になることではないと思うのですが、安全なはずの世界の側のへたれ実装が、 [CODE(URI)[https:]] だからといって[[合言葉]]に準じるものを URI に含めていたりしたら問題ですね。まあそんな設計者が悪いんですが。 - [47] それとか、素の HTTP であっても、[[認証]]が使われている世界から使われていない世界、あるいは違う [[realm]] な世界に行く時にも注意が必要です。もちろんこっちの場合も、合言葉やそれに準じるものを URI に使ったりするほうが悪いんですが。それに制限領域だからといって URI がばれると困るような設計はどうかと思うんですが。だけど現実問題、やっぱり >>46 もこれも気にした方がいいのかもなあ。 - [48] また、 HTTP でも [CODE(URI)[[[ftp:]]]] の場合でもその他の場合でも、 URI の最初の方に利用者名や合言葉を含めることができますが、安全性と個人情報保護の観点から、''必ず''削除するように注意した方がよいと思われます。 - [49] [[MUA]] にブラウザ部品を流用している [[UA]] とかでは、内部的に使っているメッセージの URI とかが流用してしまわないように注意するべきです。 -- でも[[ニュース]]の記事なんかなら、別に[[メッセージID]]の URI が送られても構わない気がします。 -- 多くの実装の形態で言うところの[[フォルダ]]とかの区分ごとに利用者が指定できるのが一番いいでしょうか。 -- その指定に関わらず [[spam]] と判定されているメッセージの場合は絶対に送らないとか、細かい設定が出来るとなお良いですね。 - [50] [[付属文書系URI]] とかなら [CODE(URI)[[[file:]]]] 同様に送らないようにする、とかの UA の実装ごとの調整も必要でしょう。 -- [[scheme]] を利用者又は追加モジュールが容易に追加できる形態の UA だったら、 default では送らないことにしておいて、 特に指定 (モジュールの定義で指定でも、利用者が指定でも、 なんでもいい。) した時にだけ送るようにするのがいいかも。 - [58] >>19,>>50 ブラウザにとって未知の scheme は、とりあえず送らないを既定にしておく方が色々安全でしょうね。 [[#comment]] * Referer 総合 Q&A [[#form(newq):'':'**%text(source=>qsum);%n;%n;[%index;] \'\'\'質問\'\'\' (\'\'%name;\'\'%text(source=>mail,prefix=>" [",suffix=>"]");%iif(source=>record-date,true=>" [WEAK[%date;]]");): %text(source=>q);%n;%n;[[#form:\'%percent;radio(id=>type,label=>回答,value=>false,default); or %percent;radio(id=>type,label=>追加質問,value=>true);: %percent;text(label=>"名前 : ",id=>name,size=>"9.5"); %percent;text(label=>"メイル: ",id=>mail,size=>9.5); %percent;check(default,id=>record-date,label=>日付を記録);%percent;n;%percent;textarea(id=>a,size=>20);\':\'[%percent;index;] %percent;iif(source=>type,true=>"\\\'\\\'\\\'質問\\\'\\\'\\\' ",false=>"");\\\'\\\'%percent;name;\\\'\\\'%percent;text(source=>mail,prefix=>" [",suffix=>"]");%percent;iif(source=>record-date,true=>" [WEAK[%percent;date;]]");: %percent;text(source=>a);%percent;n;\':\'%percent;require(a);\']]':'%require(q);']] ** 新しい質問の追加 [[#form:'%text(id=>qsum,label=>質問要約,size=>10); %text(label=>"名前 : ",id=>name,size=>"9.5"); %text(label=>"メイル: ",id=>mail,size=>9.5); %check(default,id=>record-date,label=>日付を記録);%n;%textarea(id=>q,label=>質問,size=>20);':'':'%output(id=>newq);%require(q);']] * メモ [62] ここのように頁の名前に[Q[Referer]]が入っていると referer spamer を引き寄せることができるようですね(w ([[名無しさん]] [WEAK[2005-01-31 08:26:42 +00:00]]) [64] '''どのURI参照を Referer とするか''': [[HTML]] の [CODE(HTMLe)[[[a]]]] や [CODE(HTMLe)[[[img]]]] のような単純なリンクが単純に存在する場合は Referer となるべき URI 参照は自明 (その[[文書実体]]の URI 参照) ですが、 [[取込み]]や[[輸入]]が複雑に絡むと何を送るべきかわからなくなることがあります。 例: - 外部 [[CSS]] [[スタイル・シート]]から参照された画像 -- スタイル・シートの URI 参照を使うのが自然に思えます -- 利用者エージェントによっては文書の URI 参照を使います - 外部スクリプトから [[DOM]] によって [CODE(HTMLe)[[[img]]]] [CODE(HTMLa)[[[src]]]] に URI 参照を設定することによるリンク -- 意味的に[Q[参照]]しているのは、 もしかすると外部スクリプトかもしれません。 -- 実際に画像を参照しているのは、 [CODE(HTMLe)[img]] 要素が含まれている文書です。 -- ただし元々の文書にはその画像への参照は存在していませんでした。 静的に存在していない参照の参照元とみなされるのは奇妙に思えるかもしれません。 -- なお、技術的に、 [CODE(HTMLa)[src]] 属性を指定したスクリプトの URI 参照を何らかの手段で覚えておくというのは厄介なことが多そうです。 -- 動的な参照なら Referer なしにする、というのも一つの解かもしれません。 - [[外部解析対象実体]]の中の [[XLink]] による参照 -- 外部解析対象実体内の要素の[[基底URI]] は保存されます [SRC[[[XML情報集合]]]]。 実体自身の URI 参照も保存するという実装にしても悪くはないでしょう。 -- 仮に保存したとして、 [[DOM]] などによる操作で他の場所に移したりしたら、それでもその URI 参照は保存されているべきでしょうか? - [[XInclude]] で取込んだ部分の中にある参照 - [[XSLT]] [[結果木]]にある参照 -- XSLT による変換結果は、元の文書と同じではありません。 元の文書の URI 参照を Referer としてもよいのでしょうか? -- 参照は元の文書に存在して、それを変換したものであるかもしれませんし、 元の文書には存在せず、 XSLT スタイル・シートによって補われたものかもしれません。 - [[C]] の[[前処理]]のような参照によって生じた参照 ([[名無しさん]]) [65] 各々の書式の処理モデルにおいて、参照を解釈した結果[Q[溶け込]]んでしまった部分は区別せずに (区別できずに) 参照元の一部であったかのように扱い、参照を解釈しても元々の区別が保存され続ける場合には外部から取込んだ部分の元の URI 参照を保存しておくのが、 実装的には一番楽な方法であると思われます。 しかし、前述のように、動的に作られる参照は非直感的なことがあり得るなど、 問題が無いわけではありません。 ある URI 参照が何を意味しているのかという根本的な問題にも関係してきます。 [100] [CITE@ja-JP[高木浩光@自宅の日記 - Refererを誤送信するブラウザが最近も存在する, 栃木県警の無断リンク禁止規定の復活はシステム不具合による事故]] ([[高木浩光]] 著, [TIME[2007-07-07 22:41:18 +09:00]] 版) [101] [CITE[リファラ実験 - referrer test]] ([TIME[2005-11-07 07:42:41 +09:00]] 版) [102] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-10-25 17:13:49 +09:00]] 版) [103] [CITE@en[HTML5 Revision Tracker]] ([TIME[2010-02-14 20:31:47 +09:00]] 版)