JavaScript Diary

JavaScriptでアクセス制限 [ 2001/12/05 ]

ちょっと有名なJS掲示板になると必ず出てくる「アクセスを制限したい」という質問。
.htaccessを使うなり、CGIを使うのが正規で確実な方法ですが、前者はそもそもファイルを操作出来ないことの方が多い、後者は CGI で判別しページ全体を吐き出す必要があるのである程度スキルが必要になるとかの理由で結構難しいわけです。
JavaScriptでの方法といのも結局のところソース隠蔽に帰着し「JavaScriptでの方法はお勧めできません」となるわけですが、JavaScriptでも一応、簡易的に実現することは出来るんです。

さて、JavaScriptを使った「アクセス制限もの」で世の一般にあるものでは、FORMからパスを入れて判別しそのページに飛ばすようなものが殆どですが、中には URL直打ちされたり、検索サイトからアクセスされるのも困るなんていう人もいるでしょう。
ということで .htaccess を使った方法に近いもの(本当はアクセス自体出来ないことが理想ですが、それは不可能なのでアクセスは可能でもまともに閲覧出来ない、としておきましょう)を考えてみたいと思います。

<html><head>

<meta name="robots" content="noindex,nofollow">
<meta http-equiv="pragma" content="no-cache">

<style type="text/css"><!--

BODY{ display:none; }

-->
</style>

<script type="text/JavaScript"><!--

if( location.search.substring(1) != String.fromCharCode( 51, 52, 57 ) ){
    location.replace( 'http:\/\/www.google.com\/intl\/ja\/' );
}

function init(){
    if( document.body !== void 0 ){
        document.body.style.display = 'block' ;
    }
}

//-->
</script>

<noscript><meta http-equiv="refresh" content="0;URL=http://www.google.com/"></noscript>

</head><body onLoad="init();">



内容



</body></html>

おおまかな方法は「URLの?以降の文字列にパスを挿入し、それが正しい場合のみ表示され、それ以外は他のページへ飛ばす」というものです。
このプログラムの特徴は・・・特にないです ^^);

説明しますと先ずスタイルシートで BODY自体を見えない状態にしておきます(display:none)。?以降の文字列を調べ正しい場合(この場合パスは349)、関数initが呼ばれ、BODYが表示されます(display:block)。正しくない場合、他URLへ飛ばします。スクリプト未対応ブラウザは端から飛ばされます(おぃ)。

動作例は以下( passward は 349 )
diaryfiles/access.html?349 [ 可 ]
diaryfiles/access.html [ 不可 ]

尚、String.fromCharCode については スクリプトのコード化 を参考に。
相手が JavaScript知らない人ならかなりな効果があります。あくまでも簡易でっせ。他と組み合わせると効果的かも。
駄目押しにTOPページに爆音で音楽鳴らすなり、IE6限定とか書いておけば次第に人は減っていきます(違)

というか、こんなどうでもいいことは置いといて、昨日 SmokymonkeyS を見たら、playsのtrigray に何や素晴らしいものが!
奥さん、ロープレですよ、ロープレ!!!
時間と技術さえあればDHTMLでも出来ないことはないですが実際にやる人がいるなんて・・・
実をいうと他にも見たことがあるんですが、これはクオリティが全然違う!
しかもコレ、戦闘がドラクエとかではなく、ゼルダ風味です!
SmokymonkeyS ならやり兼ねません。マジでマジで目が離せません。うきょーーー(興奮気味)

つーか、何か悔しいな。プログラム部分だけ挑戦してみようか・・・。
誰か僕の専属絵描きさんになってくれません?(っていうか時間くれ)