▼▽ Instant Access Menu ▽▼

【広告】禁煙率90%以上!! Nosmoq禁煙草  


 別ウインドウ表示で、ブラウザのツールバー・メニューを消す   

「右クリックを禁止しても、IEならツールバーから表示→ソースでソースを簡単に見ることができる」と前章で説明しました。では、ツールバーを表示させなくしたらどうでしょうか? JavaScriptで比較的簡単にできます。

例えば、hogehoge.htmlをツールバー・メニューバーなしで表示させたい場合は、リンク元のページAの中に、
<a href="#" onClick="Javascript:winopen('hogehoge.html');return false;">ここをクリック</a>
などとした上で、winopenという関数(「winopen」という関数名は原則として何でも構いません。)をヘッダー部分などに別途定義します。

HTMLのヘッダー部分に自作関数windowopen関数を定義するには、
<script language="JavaScript">
<!--
    function winopen(url){
        win=window.open(url,"host","scrollbars=1,width=780,height=480");
    }
//-->
</script>
などとすれば良いのです。4行目にある「window.open」はJavascriptで予め組み込まれている関数です。自作関数ではありませんので、名称はこれ以外では駄目です。ここで、第3引数(の部分)で、ウインドウのサイズなどを指定しているところがポイントです。空白にすることも可能ですが、その場合は、ツールバーが表示されますのでご注意を。

また、第2引数であるhostと書いている部分(の部分)は、ウインドウ名を指定できます。これは任意の文字列で構いません。ダブルクォテーション「"」もしくはシングルクォテーション「'」で囲むのを忘れないでください。第3引数であるステータスでは、上の例のように、開くウインドウのサイズを指定できます。また、scrollbars=1を入れることにより、スクロールバーが必要な場合は自動的に表示されます。

第3引数で指定できるものを下記にまとめてみますと、
status=1ステータス行(ブラウザの最下部に表示されるメッセージ欄。リンクにマウスが乗るとリンク先のURLが表示されたりしますね。)を表示。何も記述しなければステータス行は表示されません。
2004.10.16追記: Windows XP SP2におけるInternet Explorerでは、どのように設定しても必ずステータス行が表示されます。)
scrollbars=1スクロールバーを表示。「1」は「yes」の意味。「scrollbars=0」とすればスクロールバーは表示されませんが、単純に何も記述しなければスクロールバーは表示されません。
toolbar=1ツールバーを表示。何も記述しなければツールバーは表示されません。「toolbars」ではなく「toolbar」なのでご注意。私は、このスペルミスで、はまってしまったことがあります。
location=1アドレスバー(URL欄)を表示。何も記述しなければアドレスバーは表示されません。
2004.10.16追記: Windows XP SP2におけるInternet Explorerでは、アドレスバーを消した場合は、必ずタイトルバーのページタイトルの前にそのページのドメイン名が追加表示されます。URLの中のファイル名などは隠せても、ドメイン名は隠せません。参照:「Windows XP SP2導入トラブル: SP2導入トラブル: Popup(ポプアップ)ブロック機能」。)
menubar=1メニューバーを表示。何も記述しなければメニューバーは表示されません。
directories=1お気に入りの中のリンクフォルダーの中身をツールバーに表示。何も記述しなければリンクは表示されません。
resizable=1ウィンドウのリサイズ(ウィンドウの右下をマウスでつかんでドラッグすればサイズ変更できます。)を許可する場合は1、許可しない場合は0に設定。何も記述しなければリサイズはは許可されません。綴りに注意。「resizeable」は間違い。
left=0別ウインドウを表示する位置でX座標(横軸)を指定する。左の例の場合は、左端に表示するための指定。
top=0別ウインドウを表示する位置でY座標(縦軸)を指定する。左の例の場合は、最上部に表示するための指定。
width=500表示する別ウインドウの横幅。左の例の場合は500pxにしたい場合。現在、最も主流のモニター解像度は1024×768ですが、モニター解像度が800以下のユーザーも依然としていますので、ご注意を。
height=500表示する別ウインドウの縦の高さ。左の例の場合は500pxにしたい場合。

のようになります。まとめますと、

というふうにリンク元のページにリンクを設置すれば、ウインドウのサイズが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フレッツ・マンションタイプ / プロバイダ料金比較


 待望のHTML暗号化ソフト誕生!! 
株式会社プランセスの全面協力の元、HTML暗号化ソフト「SHTML」を2005年7月11日にリリースしました。

Javascriptの知識が全くない方でも利用可能なように設計されています。最短ステップの場合、暗号化したいソースを貼り付けて、「暗号化する」ボタンをクリックするだけです!!

右クリック禁止+ソースの暗号化+印刷禁止+テキスト選択禁止・・・が今までにないほど簡単に!!
(サンプル):
オリジナル: 株式会社プランセスのメインページ

暗号化したページ: こちら

 別ウインドウを開かせること(+右クリック禁止)により、ソースを見られなくする戦法の限界
1.Macでは、どんなに頑張ってもメニューを消せないので、メニューからソース表示が出来てしまう。

2.ユーザーにリンクをクリックさせて別ウインドウを開く以上、window.openerである元のファイルのソースを分析すれば、別ウインドウのURLも分かり、Windowsでもメニューがある形での表示が可能である。ブラウザの履歴を調べることでも、別ウインドウのURLは分かってしまう。

3.かと言って、「ユーザーがリンクを一度クリックした場会に、別ウインドウAを開き、その別ウインドウAからBを開き、元のAは閉じる」という方法は使えない。ネットユーザーの半数を占めるIE6 SP2では、ポップアップブロック機能が有効になっている場合が多いし、GoogleツールバーやYahoo!ツールバーにもポップアップブロック機能が付いている。この方法は今や絶対に使えない方法である。

4.どんなに頑張っても右クリックができるブラウザが存在する。メニューを隠しても、そのようなブラウザの場合、右クリックでソースが表示できてしまう。
ソースを見させない方法ではなく、ソースを見られても理解されないように暗号化することがベスト。HTML暗号化ソフト「SHTML」をどうぞ。

そして、誤解が多いのですが、例えば、hogehoge.htmlというファイルをツールバー・メニューバーなしで表示させたい場合に、hogehoge.htmlの中に「<a href="#" onClick="Javascript:winopen('hogehoge.html');return false;">ここをクリック</a>」というものを呪文のように入れれば、ツールバー・メニューバーを表示させることができるという訳ではありません。上で紹介しているのは、index.htmlなど別のファイルにユーザーが訪問してくれた際に、index.htmlの中に予め組み込んでおいた「<a href="#" onClick="Javascript:winopen('hogehoge.html');return false;">ここをクリック</a>」というハイパーリンクをクリックしてくれた場合に、hogehoge.htmlがツールバー・メニューバーが表示されないということになります。つまり2ステップです。

ですから、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
-xp.com/hidesource/javaonoff.html
です。実際にはjavaonoff.htmlはすぐに閉じられますので、実際に見ているのはブラウザごとに振り分けた別のページです)。しかし、「view-source:」などでindex.htmlのソースを見られてしまえば、hogehoge.htmlというファイル名がバレてしまいます。index.htmlからonloadイベントとwindow.openでhogehoge.htmlを開き、さらにhogehoge.htmlからonloadイベントでwindow.openとhoge2.htmlを開くというふうにステップを増やせば、hoge2.htmlのソースはより強固に守られますが、これも結局はソースを見ようとする人の根気に拠るので絶対に安全とは言えません。結局は暗号化しかないかもしれません。

 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版ブラウザについても、これでも完璧ではありません。キャッシュファイルがありますので、完全に隠すことはできません。
たまに、キャッシュ対策として、
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="Thu, 01 Dec 1994 16:00:00 GMT">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">

などのメタタグを入れれば良いと言いますが、これは「キャッシュファイルから読み込まずに常にサーバからファイルを取得してください」というブラウザに対する命令であり、「キャッシュファイルに一切のファイルを残さないように」という命令ではないようです。論より証拠で、一度試していただければ分かると思います。

httpプロトコールの特性上、別の章で説明します一部の例外を除いては、ユーザーのローカルにファイルは落ちます。htmlファイルやgifなどの画像でもストリーミングのような技術を簡単に適用できれば別ですが、画像ファイルなどをキャッシュに残さないようにさせるためには、CGIなどから画像ファイルを読み込み、キャッシュを残さないようにCGIプログラム内でヘッダーを自ら出力してあげる必要があります。HTMLファイルについても同様で、メタタグでキャッシュから読み込まないようにはできますが、キャッシュには残るはずです。キャッシュに跡形も残さないためには、CGIやPHPとして出力し、必要なヘッダーはプログラム内で出力する必要があります。キャッシュについては、詳しくは、「キャッシュファイルを残さないためには?」の項目を参照してください。



PHP/Ruby/Python/ImageMagick/GD/cronが使える本格レンタルサーバが月額1,050円〜

また、当然のことながらJavaScriptがoffであった場合には、HTMLソースを見られてしまうことになります。では、index.htmlでJavaScriptのon・offを判断し、JavaScriptがoffの場合は次のページに入れないようにし、onの場合はツールバー・メニューの無い別ウインドウを開く(window.openerである元のウインドウは自動的に閉じる)というのはどうでしょうか? サンプルをこちらに準備しました。テスト環境のうちWindows版IE5.01の場合のみ、自分自身を閉じる際に「このウインドウは閉じられようとしています」と警告が表示されたが、他の環境では何の警告も表示されませんでした(参照:テスト環境一覧)。


広告:唾液で、妊娠の可能性の高い排卵期を調べるレディデイ(生理不順の方も利用できます)

この最初のページで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する。
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>リロード対策</title>
<script language="JavaScript">
<!--
//単純にリロードしたかっただけの人
//クッキーを空にしてあげる。この場合はhogehogeというフィールド名
document.cookie = "hogehoge=;expires=Thu,08-Jan-70 00:00:01 GMT";
//再びreloadする。Mac版IE5.0ではなぜかlocation.reload()では、動かないので、
//URLの末尾にランダムな数字をつける
if(location.href.length < 60){ //URLの長さによりリロードの回数が分かる。
	if(location.href.indexOf("?") != -1){
		location.href = location.href + "&" + Math.ceil(Math.random()*10000);
	} else {
		location.href = location.href + "?" + Math.ceil(Math.random()*10000);
	}
} else {
	alert("リロードは数回に留めてください。");
	}
//-->
</script>
</head>
<body bgcolor=#FFFFFF>
<noscript>
//Javascriptをoffに切り替えてリロードした可能性大。
JavaScriptがoffなので表示できません。JavaScriptをonにした上でリロードしてください
</noscript>
</body>
</html>

JavaScriptがonの場合はただ単にリロードしたかっただけの人であるから、クッキーを空にしてあげた上でリロードする。JavaScriptがoffの場合は、「JavaScriptがoffなので表示できません。JavaScriptをonにした上でリロードしてください」と表示させる。この場合はクッキーはそのままにしておく。何回リロードしても、このメッセージが表示されるようにします。この時はJavascriptがoffなのでソースを見ることが出来ますが、ソースを表示させても右クリック禁止のコードを含めて有益な情報は一切確認することができない。確認できるのは、「JavaScriptがoffなので表示できません」というエラーメッセージのみ。

【広告】 Bフレッツ対応プロバイダ料金比較。主要プロバイダのキャンペーン情報など。工事費28,455円が無料になるプロバイダは?


クッキーがない場合及び、JavaScriptがonの状態でリロードした人には、表示させたいコンテンツを表示させます。通して書くと、こちらのようなコードになるでしょう。また、それを実行した結果はこちらです。JavaScriptがonであれば、実行した結果は表示されるはずです。ここで、JavaScriptの設定をoffに切り替えれば、IEの場合はリロードしなければ右クリックできません。しかし、リロードすると「JavaScriptがoffなので表示できません。JavaScriptをonにした上でリロードしてください」と表示されます。何回リロードしても同じメッセージしか表示されません。JavaScriptをonにしてリロードすると、また右クリックができないページが表示されますので、ソースを見るにはキャッシュファイルから取得するしか方法は、ほとんど ありません。

しかし、この場合、クッキーをoffにされていたらどうするのという問題があり、考え出すと切りがありません。適当にやらないと頭がおかしくなってしまうでしょう。また、クッキーの偽造は可能なので、クッキーを空っぽにした上でリロードすればソースを見られてしまいます。

次のページでは、専用ソフトを利用して解読不能なソースにする方法を説明していきます。

Back ← |  |  |  |  |  |  | |  | 10 | 11 | 12 |13 | → Next


連絡先:info@broadband-xp.com
(免責事項)このホームページの内容に起因する如何なるトラブルに対しても責任を持ちえません。必ず自己責任でご利用ください。