気まぐれ実験

直接リンクを防ぎたい

よくあるリクエストとしては、勝手にリンクされることを防ぎたいというのがあります。 インターネットの世界は勝手にリンクできるのが魅力だと思うのですが、 それを嫌がる人がいるのも事実で、、、

仕組み的には、リンクをはるためにHTTPが存在しているわけで、 最近はやりのブログなどについているトラックバックもそのようなリンクを 自動的に張るための仕組みです。HTTPでWebを公開している以上、 「公開」が前提なのですが、、、たまに勘違いされている方も多いようで。

が、確かに直接リンクを嫌がる場合もあります。
例えば、

  1. フレームなどにリンク先の内容が取り込まれてしまい、 あたかもリンク元の1コンテンツのような見え方になってしまっている場合。 (意図的ではなくても、結果的にそうなることもあります。)
  2. ページの作成者が意図した順番で見て欲しい、つまり、 トップページから入って欲しいのに、別のページに直接リンクを張られてしまう場合。 (まぁ、これも、作る側の勝手ですが)
  3. あと、これはページではないのですが、画像の他サイトからの呼び出しが多く、 トラフィックが異常に増えてしまうのを防ぐ場合。

これらは、通常、サーバー側でなんらかの細工をする必要があります。 しかし、通常のHTMLレベルでも1と2の場合であればなんとかなります。 (画像はサーバーの設定が自由にできないと、 もしくはCGI等で画像を書き出さないと無理です)

JavaScriptを利用するのですが、JavaScriptのreferer情報を見て、 その内容で表示させたりしなかったりというコントロールをするわけです。

サンプルは下をどうぞ。下のリンクをクリックすると表示を拒否する メッセージを出します。リンク経由でなく、 直接URLから呼び出すとOKの表示が出ます。これは解説不要でしょう・・・

>>こちらをクリック(サンプル)

こちらのアドレスをコピーして直接呼び出した場合と比較してみてください。
http://www.imymode.com/exp/scripts/jsref.html

やっぱり解説&応用編

解説が不要・・・といったところで、やっぱり解説があった方がいいと思うので、 簡単に解説して応用したいと思います。

先ほどのJavaScriptのソースは下のとおりです。

01:<script language="JavaScript">
02:var refinfo=document.referrer;
03:
04:if (refinfo){
05: document.write("リンクをクリックしてきましたね?<br>");
06: document.write("下のアドレスから来たでしょ?<br>");
07: document.write(refinfo);
08:}else{
09: document.write("ようこそ<br>");
10: document.write(refinfo);
11:}
12:</script>

これをHTMLに書き込めばいいのですが、簡単に解説してみたいと思います。 まず2行目です。

02:var refinfo=document.referrer;

この「document.referrer」で、直前に見ていたアドレスを取得することが可能です。 これを「refinfo」に代入します。ここになにも入っていないということは 直接来たということになりますよね。

if (refinfo){
 refinfoになにかが入っていればこの処理
 つまり、リンクからきたら、、、
}else{
 refinfoになにも入ってない場合
 つまり、直接読み出したら、、、
}

簡単ですよね?これをちょっとだけ応用すると、「if (refinfo = = URL)」 というような感じで特定のURLだけから来た場合に表示するというようなことも 可能になるわけですよね?

画像の直接リンクにまつわる勘違い(^^

よく、リンク募集、でも バナーの直接リンク禁止!なんていうのを見かけますが、 「は?なんで?」って思います。 画像を直接リンクされて困るのはネットワークを保持しているHosting会社です。 もし、そのHosting先の規約で1日の転送量による従量制料金の規制でもあるなら 理解できるのですが、全く関係のない場所で(ようはプロバイダーが用意した ページスペースで)バナーの掲載をしていて直接リンク絶対禁止なんていうのは ある意味笑ってしまいます。

おそらく、いくつかある有名素材配布サイトが先ほどかいた Hosting上の転送量の問題から直接リンクを禁止しているのを、 勘違いして自分のサイトも・・・と思っているのでしょうか?

あと、Geoとかが直接リンクをサーバー上の設定で禁止しているのは、 GeoのHTMLページを見せたいからです。Geoはそこに表示されるHTML上の広告で 経営が成り立っています。それが、画像だけリンクされるのでは広告は表示されません。 よって、言葉で禁止という以前に、サーバーでそのようなことが 出来ないようにしているのです。ただし、これも、先ほどの JavaScriptで紹介したような方法をサーバーレベルで実行しているだけのことですので、 Referer情報を出さないブラウザ(Operaや自作した場合など) の場合には意味をなしません。

個人的にはインターネットは情報を自由にやり取りするために出来た空間で、 その手段としてHTTPやHTMLなんていう手法が作り出されたところから考えると、 基本的にはリンクOKじゃないの?と思います。もしいやなら、言葉で「だめよ」ではなく、 そのようなサーバーを借りるなり、作るなりして設定する必要がありますよね。 そのように書いて、初めて直接リンク禁止と言えるのではないでしょうか?

不正アクセス禁止法的にも、自分の情報を勝手に参照されたくなければ、 それなりの措置を講じる必要があります。誰でも見てもらうための空間 (つまり、インターネット)に情報を置いておいて、 見るなと主張すること自体が間違っているというわけです。 パスワードを設定するなり、直接参照できないような機械的な手法を利用することで、 初めて保護される対象になるのではないでしょうか?

(2004/12/18 by あいまい)

Valid XHTML 1.0! Valid CSS!