別ウインドウ表示で、ブラウザのツールバー・メニューを消す「右クリックを禁止しても、IEならツールバーから表示→ソースでソースを簡単に見ることができる」と前章で説明しました。では、ツールバーを表示させなくしたらどうでしょうか? JavaScriptで比較的簡単にできます。
例えば、hogehoge.htmlをツールバー・メニューバーなしで表示させたい場合は、リンク元のページAの中に、
HTMLのヘッダー部分に自作関数windowopen関数を定義するには、
また、第2引数であるhostと書いている部分(の部分)は、ウインドウ名を指定できます。これは任意の文字列で構いません。ダブルクォテーション「"」もしくはシングルクォテーション「'」で囲むのを忘れないでください。第3引数であるステータスでは、上の例のように、開くウインドウのサイズを指定できます。また、scrollbars=1を入れることにより、スクロールバーが必要な場合は自動的に表示されます。
第3引数で指定できるものを下記にまとめてみますと、
のようになります。まとめますと、
というふうにリンク元のページにリンクを設置すれば、ウインドウのサイズが500×500(リサイズ可能)でindex.htmlが開きます。ステータスも表示されますし、ツールバー、メニュー、アドレスバー(URL欄)、リンクも表示されます(これではソースを隠すという目的には使えませんが・・・)。第3引数にこのように属性が複数並ぶ場合は、「カンマ」でそれぞれを区切ります。 話を元に戻します。「window.open」の第一引数である「url」の部分(の部分)は、自作関数winopenの引数で与えられたものがそのまま入ることになります。「<a href="#" onClick="Javascript:winopen('hogehoge.html');return false;">ここをクリック</a>」とした場合は、hogehoge.htmlがwinopen関数の引数として渡されていますので、結果的にwindow.openの第一引数である「url」には「hogehoge.html」が代入されることになります。
ここで紹介したものは、HTMLヘッダー部分で関数を定義し、それを タグ内にあるハイパーリンクから呼び出すという手法でしたが、もちろん、ヘッダー部分での関数定義を完全に廃止し、ハイパーリンク内でwindow.open関数を記述することも可能です。<a href="#" onClick="Javascript:window.open('hogehoge.html','host','width=500,height=500,scrollbars=1');return false;">ここをクリック</a> などとすれば良いです。ただ、この方式だと、このようなハイパーリンクを追加するたびに、これらを書かなければなりませんし、メンテナンス上も問題があることから、ヘッダー内で関数を一括記述しておけば、楽チンです。 以上、ここまで基本的なことではありますが、Javascriptのwindow.open関数について見てきました。実を申しますと、この部分は最初、非常に簡潔にのみ紹介していたのですが、「設置の仕方がよく分からない」という方からの問い合わせが相次いだため、敢えて基本的なことにまで踏み込んで説明しました。このページを閲覧していただいている方のJavascriptに関する知識が、必ずしも私が想定していたレベルの方ばかりでないことが分かった次第です。 【広告】Bフレッツ・マンションタイプ / プロバイダ料金比較
ですから、index.htmlはツールバー・メニューバーは見えていますから、index.htmlのソースを解読されることで、結局はhogehoge.htmlというリンク先のファイル名がばれ、hogehoge.htmlのソースも芋ずる式に分かるということは考えられます。これを防ぐにはindex.htmlを暗号化するか(暗号化の方法は、「専用ソフトで暗号化する」の章などを参照してください。)か、次の方法しかありません。
index.htmlにアクセスがあった場合に、onloadイベントとwindow.openを組み合わせてhohoge.htmlを開き、さらにwindow.openerであるindex.htmlを自動的に閉じるようにします。そうすれば、ユーザーが目にするのは結局はhogehoge.htmlだけになります(これを利用した例はhttp://www.broadband
(※ HTMLソースを隠したい人には朗報かもしれませんが、Windows XP SP2+IE6では、「view-source:http://〜」は無効になったようです。参照:「Windows XP SP2導入トラブル: SP2導入後view-sourceが使えなくなる」。 ただし、同時にXP SP2+IE6の環境では、デフォルトでポップアップ・ブロック機能が有効になっていますので、ポップアップウインドウからまた別のウインドウを開くというようなことがブロックされるようになっていますので、作りにくくなったともいえます。参照:「Windows XP SP2導入トラブル: SP2導入トラブル: Popup(ポプアップ)ブロック機能」。実際、このページのサンプルもXP SP2+IE6の環境では動かなくなっているものも、あります。あらかじめご了承ください。) では、index.htmlとhogehoge.htmlという2種類以上のファイルを準備しなければ絶対に駄目かというとそうでもありません。hogehoge.html単独で処理することも、制限付きですが可能です。ここではスクリプトの書き方については詳しくは述べません。サンプルをこちらに準備しましたので、ソースを右クリックで確認して各自研究してください。(nomenu.htmlという単一のファイルで、ツールバーなしのウインドウを開くようにしています。制限事項についてはリンク先でご確認ください。IE6 SP2でポップアップウインドウがすぐ閉じる場合は、Ctrlキーを押しながら、リンクをクリックしてください。) 【広告】 動的なHTMLソースのリアルタイム難読化用PHPライブラリ「サーバサイドSHTML」
ただし、Mac版IE5やMac版ネスケ6.1では、ツールボタンなどは隠せても、メニュー自体はブラウザに付属するのではなく、OSのメニューと混然一体化?しているため、隠すことができません。 を上げてみました。
また、Windows版ブラウザについても、これでも完璧ではありません。キャッシュファイルがありますので、完全に隠すことはできません。
などのメタタグを入れれば良いと言いますが、これは「キャッシュファイルから読み込まずに常にサーバからファイルを取得してください」というブラウザに対する命令であり、「キャッシュファイルに一切のファイルを残さないように」という命令ではないようです。論より証拠で、一度試していただければ分かると思います。 httpプロトコールの特性上、別の章で説明します一部の例外を除いては、ユーザーのローカルにファイルは落ちます。htmlファイルやgifなどの画像でもストリーミングのような技術を簡単に適用できれば別ですが、画像ファイルなどをキャッシュに残さないようにさせるためには、CGIなどから画像ファイルを読み込み、キャッシュを残さないようにCGIプログラム内でヘッダーを自ら出力してあげる必要があります。HTMLファイルについても同様で、メタタグでキャッシュから読み込まないようにはできますが、キャッシュには残るはずです。キャッシュに跡形も残さないためには、CGIやPHPとして出力し、必要なヘッダーはプログラム内で出力する必要があります。キャッシュについては、詳しくは、「キャッシュファイルを残さないためには?」の項目を参照してください。
この最初のページでJavaScriptのon・offを判別し、onの場合はwindow.openでツールバー・メニューの無い別ウインドウを表示させる手法は結構見られるのですが、問題点としてはpopupウインドウ対策(無料ホームページなどで問答無用に開く広告ウインドウなどを表示しないようにする)のソフトを入れているユーザーの場合、メインとなる別ウインドウ自体が同ソフトの機能により開かないということです。また、Windows XP SP2+IEの組み合わせでは、デフォルトでポップアップ・ブロック機能が働くため、情報バーが表示され、そのままではポップアップ表示ができないことは、必ず考慮しておかなければならない問題です。 さらに、JavaScriptのon・offの判定時にはonにしておいて、ソースを見たいときはoffに切り替えれば、簡単に見れてしまう。onからoffに切り替えた直後は、IEでは右クリックできないが、IEでもF5キーを押してリロードさせると右クリックできるためだ。ネットスケープではonからoffに切り替えた直後から、リロードの必要性もなく、右クリックできてしまいます。
JavaScriptがonからoffにページロード後に変更されれば、即座に別のページに遷移するようなページを作成できれば完璧なのですが、今のところ、そのようなHTMLタグ・Javascriptは思いつきません。唯一、無理やりとも言うべきやり方ですが、前述のように、圧倒的シェアを誇るIEでは、幸いなことにリロードしない限り、JavaScriptをoffに切り替えてもその場では右クリックできません。そこで、最初のロード時にクッキーを焼いて、リロード時にはクッキーがあるかどうかの判別をCGIやPHPで行い(であるからして、そのファイルは必然的にCGIやPHPで書かれていなければならない。)、クッキーがあればリロードだから、下記のようなHTMLファイルを出力するようにCGIやPHPでprintする。
JavaScriptがonの場合はただ単にリロードしたかっただけの人であるから、クッキーを空にしてあげた上でリロードする。JavaScriptがoffの場合は、「JavaScriptがoffなので表示できません。JavaScriptをonにした上でリロードしてください」と表示させる。この場合はクッキーはそのままにしておく。何回リロードしても、このメッセージが表示されるようにします。この時はJavascriptがoffなのでソースを見ることが出来ますが、ソースを表示させても右クリック禁止のコードを含めて有益な情報は一切確認することができない。確認できるのは、「JavaScriptがoffなので表示できません」というエラーメッセージのみ。 【広告】 Bフレッツ対応プロバイダ料金比較。主要プロバイダのキャンペーン情報など。工事費28,455円が無料になるプロバイダは?
しかし、この場合、クッキーをoffにされていたらどうするのという問題があり、考え出すと切りがありません。適当にやらないと頭がおかしくなってしまうでしょう。また、クッキーの偽造は可能なので、クッキーを空っぽにした上でリロードすればソースを見られてしまいます。 次のページでは、専用ソフトを利用して解読不能なソースにする方法を説明していきます。
連絡先:info@broadband-xp.com (免責事項)このホームページの内容に起因する如何なるトラブルに対しても責任を持ちえません。必ず自己責任でご利用ください。 |