リンクを制限する方法

最終修正日 2007.11.10.  

リンクを制限することについて

法的には無断リンクを制限する根拠はありません。なので、無断リンク禁止、と英語で書いても外国人には無意味です。日本人でも「無断リンク禁止? 何いってるの」という反応を示す人も多く存在します。著作権法で禁止の根拠を示せる無断転載とは、事情が違います。ときどき「違法サイトからのリンクは禁止です」という文章をみかけます。ですが、法を恐れない人間が、違法行為でない無断リンクにためらいを感じてくれることなど、期待するだけむだです。逆に「このサイトは著作権法に違反するサイトだから、アダルトだから、無断リンクしないで下さい」という文章もみかけます。ですが、違法サイトや著作権法違反サイト、アダルトサイトなんかなくなってしまえばいいと思っている人には、何の効果もないでしょう。実際に自分の嫌いなサイトを人目に晒す目的で、無断リンクをする人はいます。

現在「リンクは事前に許可をとって下さい」というのは個人的なお願いに過ぎません。
マナーだと錯覚されがちなのは、友情や連帯や好意の現れであるリンクがあるからです。ですがウェブ上には愛や友情や連帯や好意や仲間意識とは無縁のリンクもあり、それらも規制できるものではなく、また規制すべきではないのです。見知らぬ相手へリンクを切って下さいとお願いしても、相手がそのメールを無視した場合には、それ以上どうすることもできません。

なので、技術的に無断リンクや直接リンク(ディープリンク)を制限する方法を紹介します。

リンク元を判断して弾く方法

ブラウザが送信元に伝える情報のひとつにreferrer(言及する人の意)があります。これはリンク元のURLです。IEの場合は直前に表示されていたURLが伝えられます。(バグだと言われています)なので、アクセス解析の結果、単に直前に開かれていたページのURLがアクセス解析に「リンク元」として残ることがあります。また、リファラーの情報の提出は任意なので、リファラーの偽装Referer リクエストヘッダの除去は可能です。また、新規ウィンドウを開き、URLをコピペして飛んだ場合もリファラー無しとなります。なので、嫌がらせ以上のものにはなりにくいです。なお、リファラーを伝えないセキュリティソフトの使用者や、一部の携帯電話で閲覧している人が、閲覧できないことがあります。

Java Scriptで弾く

特定の文字列が含まれているURLからの訪問者を弾くことができます。

altavista.comから飛んできた人をhttp://www.yahoo.co.jp/ にとばします。使う場合は赤文字部分を書き替えて下さい。

<Script Language="JavaScript">
<!--
reff=document.referrer;
if(reff.indexOf('
altavista.com')!=-1){
location.replace('
http://www.yahoo.co.jp/')
}
//-->
</Script>

上記スクリプトのサンプルです。

許可されていないルート 許可されているルート 

許可されていないルートに含まれている'test'という文字列を、ここでは弾いています。弾かれた場合、水晶宮トップに飛ばされます。弾かれなかった場合、ここへ戻って来れます。

指定URLからのみアクセスを許可する場合は、こう書きます。

<script language="JavaScript">
<!--
if(document.referrer.indexOf("
許可するURL")== -1) window.location.href="飛ばし先URL";
//-->
</script>

上記のスクリプトのサンプルです。

許可されていないルート 許可されているルート

許可されているルートのhttp://www.yuzuriha.sakura.ne.jp/~akikan/kaigai/test1.htmlという文字列をここでは許可しています。弾かれた場合、水晶宮トップに飛ばされます。弾かれなかった場合、ここへ戻って来れます。それから下のURLをコピペで飛ぶ方法を試して下さい。正常に作動した場合、コピペではこのサイトのトップに飛ばされます。

www.yuzuriha.sakura.ne.jp/~akikan/kaigai/test.html

また、2回目はブラウザの設定でJavaScriptを切ってお試し下さい。

これらはJavaScriptをオフにしている人には効果がありません。もちろん、画像の直リンクも防げません。また、ひとつのページにいくつもJavaScriptを書くと誤作動することがあります。

なお、複数のURLからのアクセスを許可する場合はこう書きます。

<script language="JavaScript">
<!--
if(document.referrer.indexOf("
許可するURL")== -1) if(document.referrer.indexOf("許可するURL")== -1) window.location.href="飛ばし先URL";
//-->
</script>

全てのブラウザでの正常動作の保証はできません。

 

CGIで弾く

WEB POWERのリンク・ブロッカーは参照元をチェックして、許可されたURL以外のアクセスの場合は、アクセスを拒否できます。

 

CGIをいじって掲示板への直接リンクをふせぐ

レンタル掲示板ではなく、自分で設置している掲示板なら、いろいろなサイトで配布されている掲示板用のパーツをとりつけて下さい。

CGIROOM

 

.htaccess、SetEnvIfで弾く

.htaccessの使えるサーバーで可能な方法です。Apacheのマニュアルによりますと、SetEnvIfディレクティブが .htaccessに設定できるようになったのは、Apache のバージョンが1.3.13 以降からです。画像の直リンク制限にも使えます。

特定のサイトからのリンクからの訪問のみを許可します。使う場合は赤文字部分を書き替えて下さい。

SetEnvIf REFERER "www.yuzuriha.sakura.ne.jp/~akikan/kaigai" Lilith
Order Deny,Allow
Deny from all
Allow from env=Lilith

特定のサイトからのみ、訪問を拒否します。

SetEnvIf REFERER "geocities.com" Lilith
SetEnvIf REFERER "
geocities.jp" Lilith
Order Allow,Deny
Allow from all
Deny from env=Lilith

 サンプル

特定のサイトからのみ許可 このディレクトリからのリンク以外は弾かれます。なお、正確なリファラー情報を吐かないブラウザやダウンロードソフトの場合、この先に進めないことがあります。リファラー情報を伝えないようにするセキュリティソフトを使用している場合も同様です。

特定のURIからのみ不可 ここから入れます。なお、キャッシュによってアクセス不可のはずのページが表示されることがあります。再読み込みしてみて下さい。

 

.htaccess、mod_rewriteによる制限

.htaccessおよび、mod_rewriteの使えるサーバーを利用している場合、リファーがとれないブラウザ以外は、以下の方法で直リンク規制が使えます。ブックマークや直リンク、URL手打ちをはじき、特定のURL (例 www.aaa.com/bbb/ccc.htm)からのリンクをたどることによってのみ入れるよう、特定のディレクトリを作ることができます。ただし、.htaccessが許可されているサーバーでも、mod_rewriteが使えるとは限りません。デフォルトで使えないようになっている機能のはずですので、サーバーのマニュアルを熟読し、サポートに問い合わせて下さい。ちなみにこのサイトが置かれているさくらウェブスタンダートはセキュリティの問題からrewrite機能が使用不可になっています。

もしrewrite機能が使える事が確認出来ましたなら、エディタで次のような内容のファイルを作ります。

RewriteCond %{HTTP_REFERER} !^ http://www\.aaa\.com/bbb/ccc\.html.*$ [NC] RewriteRule ^(.*)$ - [F]

これを.htaccessファイルとして、アクセス制限したいディレクトリに置きます。最上層のディレクトリに置きますと、ブックマーク不可能なページになってしまいます。

参考URL Apache HTTP サーバ バージョン ドキュメント

 

Apacheに組み込むモジュールとして、ディープリンクを防ぐmod_deny_deeplink.cというのもありますがデフォルトで入ってはいないと思うのでApacheにモジュールを組み込む事ができる立場の人でないと、おそらく使用できないでしょう。

 

リンク元情報を伝えないリンクの張り方

逆にリンクをたどった訪問者が、弾かれない方法についてです。

URLをテキストで書く

http://www.yuzuriha.sakura.ne.jp/~akikan/
www.yuzuriha.sakura.ne.jp/~akikan/

海外の掲示板では基本かもしれません。ただ、ロボット避けをしていないページでこれをやると、アドレスを検索されてばれる可能性が高いでしょう。

国内の掲示板でも、テキストのみでアドレスを記すことはあります。例えば、2ちゃんねるは多くの場合、あえて、最初の1文字を抜いたttp://www.yuzuriha.sakura.ne.jp/~akikan/というテキストの形で、アドレスは書き込まれます。これをコピーしろと言うのですね。http://www.yuzuriha.sakura.ne.jp/~akikan/の場合、下の2ちゃんねる弾きが作動します。が、ttp://www.yuzuriha.sakura.ne.jp/~akikan/の場合は無理です。気休め程度にどうぞ。

なお、このJavaScriptで特定のサイトからのアクセスを弾こうとしていたサイトが、その特定のサイトからのアクセスでないのに、ページがまともに表示されないということがありました。原因はタグのコピーミスで、最後の</Script>がなかったことです。使う方は気をつけて下さい。

<Script Language="JavaScript">
<!--
reff=document.referrer;
if(reff.indexOf('
ime.nu')!=-1){
location.replace('
http://www.yahoo.co.jp/')
}
//-->
</Script>

.htaccess、SetEnvIfで2ちゃんねるからのアクセスを弾く場合はこうです。ime.nuはPC、2ch.netは携帯の場合です。これも完全ではありません。

SetEnvIf REFERER "ime.nu" Lilith
SetEnvIf REFERER "
2ch.net" Lilith
Order Allow,Deny
Allow from all
Deny from env=Lilith

JavaScriptでリンクを張る

<A href="JavaScript:location.href='http://taruo.net/e/'">サンプル</A>

JavaScriptの場合は、他の書き方もあります。ブラウザによってはリファラーが残るものや上手く作動しないものもあります。

 

CGIを使用してリンクを張る

機能的には2ちゃんねるのime.nuと同じようなものです。なので、CGIの場所はばれる可能性があります。

はなごよみ
ここのReferer-SweeperというCGIを使って下さい。

ランドクルーザーラウンジ
ここのREDIRECT CGIというCGIを使って下さい。
こちらをネスケ4.7で試したところ、こういうリファラーが残りました。
http://ra-map.hp.infoseek.co.jp/cgi-bin/redirect/direct.cgi?http:
//www.yuzuriha.sakura.ne.jp/~akikan/

 

検索エンジン等を利用してリンクを張る

一瞬でとぶわけではありませんが、こういう張り方もあります。

The gate to darkness への回りくどいリンク

裏技

http://ime.nu/www.yuzuriha.sakura.ne.jp/~akikan/

2ちゃんねるのCGIにただ乗りしてみました。これで、アクセス先は2ちゃんねるからリンクが張られたと、勘違いするかもしれません。

 


  
< prev back next >