まだなにもない空間:IndexJavaScript実験場 Top>アクセス制限 4
*

JavaScript実験場

アクセス制限をかける -改造編・1-

Index

JavaScript実験場 Topに戻る

スクリプト、ソースの秘匿

これまでのスクリプトで、とりあえずパスワードを入力させて、正確なパスワードが入力されたときには特定のURLに移動させるというアクセス制限の動作だけは作成できました。 しかし、これまでのスクリプトではソースを表示されてしまうと、パスワードや移動先URLが露見してしまいます。 ここからは、この問題を解決して、できるだけ強固なブロックをかけるように工夫してみようと思います。

外部スクリプトファイルの利用

HTMLの仕様では、<script>要素にsrc属性を指定することで、そのHTMLファイルとは別のファイルに記述したスクリプトをインポートして、利用することができるようになっています。 外部スクリプトファイルを利用すると、複数のページで同じ動作を実現させたいときに、同じスクリプトをすべてのHTMLファイルに記入していく必要がないので、メンテナンス面で非常に便利になります。 この場合、ソースの表示ではHTMLファイルの中身だけが表示されることが多く、外部スクリプトをソースとして参照されない可能性が大きくなります。 これを利用して、スクリプトを外部ファイルに保存しておいて、それを呼び出す形にすれば、HTMLソースからスクリプトを隠すこともある程度は可能でしょう。 ただ、公開している以上は、ファイルにアクセスする手段が必ず用意されているものですので、場合によってはスクリプトを見られる可能性は残ります(実際、外部ファイルに直URLでアクセスすると、ダウンロードできちゃったりします)。

JavaScriptを外部スクリプトファイルとして利用する場合は、<script>タグ内のスクリプト部分をテキストファイルに書き出し、それをjsファイルとして保存します。 間違っても、<script>タグやHTMLのコメントアウトまで記述しないでくださいね。 外部JavaScriptファイルの拡張子は「.js」です。 作成した外部スクリプトファイルをHTMLファイルから呼び出すときは、以下のようにソースを記述します。

例:
<script src="**.js" type="text/javascript"></script>

この場合、<script>要素内に何かを記述しても無視されますので、注意してください。 横着して外部スクリプトのインポートと、そのページ内だけのスクリプトを一つの要素で済まそうと考えても、無理ですよ(^_^;)。 あと、上記のタグを記述するときには、終止タグ(</script>)を忘れずに書くように注意してください。 意外に書き忘れることがあります。

右クリックのブロック

JavaScriptで、右クリックをイベントとして取得し、スクリプトを動作させることで、右クリックメニューから[ソースの表示]をブロックするという方法も、ソースの秘匿としてよく引き合いに出されます。 ダウンロードされたくないオーディオ系ファイルのダウンロード防止策としてよく使われる手段ですが、これは利用しても効果的ではない場合も多いです。 コピー&ペーストの操作を右クリックでしたい人などにとっては、かえってアクセシビリティを大きく損ねてしまうことも多いので、あまりお勧めできません。

効果的でないことの理由ですが、まずブラウザによって対応していない例が多々あります(現状、IEのみで有効)。 ブラウザが対応していたとしても、メニューバーの[表示]から[ソース]を選択するとソースが表示できます。 メニューバーからのソースの呼び出しは、フレームを使えば一見ブロックできますが、結局そこに目的のHTMLファイルのURLが書かれていれば同じことですね。 また、強行手段としては、前のページに戻り、そのページへのリンクで右クリックし、[対象をファイルに保存]を選べば、HTMLファイルがそのままダウンロードできてしまいます。 さらにいえば、一時的にJavaScriptを実行させないようにブラウザを設定しなおせば、ソースも簡単に見られます。 基本的に、右クリックは隠蔽策としては不十分です。

これだけボロボロにいいましたので、やり方については、特に詳しくは書きませんね。 とりあえず、<body>タグ内に、「onContextmenu="return false;"」などとすると、右クリックしても反応しなくなります。 このイベントハンドラで関数を呼び出して、その関数の最後に「return false;」としても右クリック禁止の効果が出ると思います。

ソースをかく乱する

上の方では、ソース自体を見せない、というスタンスでのパスワードやURLの隠蔽工作を書いてきました。 しかし、それぞれの方法には穴があることも指摘しました。 では、それらを考慮した上で、隠蔽工作を強化するにはどうすれば良いのか、という方向を考えてみると、ソースを見られても理解できないような形にすれば良い、という風に考えるのは自然だと思います。 これ以降は、その方向でいろいろと考えてみましょう。

ソースを見られても理解できないような形にするには、どうすればいいか。 それを実現するのにいちばん簡単なのは、MicroSoftが提供しているスクリプトファイルの暗号化プログラムなどのようなソフトをインストールして利用することです。 これを利用すると、スクリプトがすべて暗号化されて判読できなくなります。 しかし、この方法を取ってしまうと、私が解説できる内容がなくなってしまうので、とりあえずここでは詳しくは触れません(オイオイ)

では、ソースを見られても理解できないような形にするにはどうするか。 簡単に言えば、隠蔽したいコアの部分はパスワードとURLです。 その二つを隠蔽してしまえば、簡単にロックを破られることはないでしょう。 そこで、これらを隠蔽する方法について考えます。 私がここで考えた方策として、3つほど挙げます。 一つは、正規表現を利用して特定の文字列を別の文字列に置き換えてしまう方法。 もう一つは、文字列の順番を法則にしたがって入れ換えてしまう方法。 そして、文字列をASCII形式に置き換えて、パッと見ではわからなくしてしまう方法。 このどれもが、JavaScriptで実現可能な範囲のものですので、それを使って隠蔽したい部分を暗号化してしまいましょう。 もちろん、スクリプトが実行されるときには、その工作を元に戻してくれるキーも、同時にスクリプトの中に埋め込んでおく必要があります。 (そのキーを辿られれば、暗号化した部分を解読される可能性はありますが、よほど粘着質な方でなければそこまではしないでしょう(^_^;))

次は、URLとパスワードの、JavaScriptを使用した暗号化について、具体的な方法を書きます。

ご意見・ご感想・ご質問・お気付きの点などについては、下記連絡先までお寄せください。
連絡先:ki_ng@mail.goo.ne.jp
inserted by FC2 system