本体策の大前提として、右クリック禁止の対策は既に行っていて、右クリックで画像のパスを確認することが不可能なようにしておく必要があります。2.baseタグが丸見えでは、結局意味がないのでは?はい、執拗なユーザーから画像などをプロテクトするためには、もう少し対策を強化する必要があります。baseタグをJavaScript化し、外部ファイル化します。baseタグをdocument.writeで書き出すようにして、それをJSファイル化します。」と書いて読み込むようにします。この対策により、画像を保存したいと考えたサイト訪問者は、まず、base.jsをダウンロードして、その中で指定されている基準となるURLを解明し、その次に、HTML本体のソース内に記された画像のパスと組み合わせて、画像のURLを解読するという二段階を踏まなければならなくなります。面倒な作業ですので、諦めてくれる可能性がそれだけ高くなります。JavaScriptを解析できない多くの一括ダウンロードソフトに対しては、本体策で十分になります。baseタグをJavaScript化し、外部ファイル化した後、そのJSファイルを暗号化します。いくら、上記「a.」のやり方で外部ファイル化しても、その外部ファイルを再ダウンロードしたり、キャッシュファイルから探し出された場合、基準となるURLが分かりますので、本当の画像ファイルのパスが分かってしまいます。そこで、当サイトのウェブマスターが開発したHTML暗号化ソフト「SHTML」を使って、この外部ファイルを暗号化してみます。Encoder」というメニューがありますので、このメニューで難読化・暗号化が可能です。」を難読化・暗号化することを考えます。SHTMLの体験版は、「難読化」の範囲なら制限事項なく30日間、難読化できます。SHTML体験版のダウンロードはこちらサンプル3(JSファイルを難読化+暗号化させた例)3.考慮すべき問題などbaseタグを活用することで、あらかじめ、このbaseタグの特性を知り、余計な問題が生じないようにしなければなりません。href="">タグなど全てに影響します。相対パスを使っている場合には、ハイパーリンクを張るときにも注意が必要です。心配な場合には、絶対パス(http://〜のURL形式もしくは、ドキュメントルートからのパスをスラッシュ「/」で始める形式)を用いてください。ペー内リンク(「#hogehoge」)でも同様です。href="#hogehoge">hogehoge</a>」の指定方法では、別のページにジャンプする結果になりますので、注意が必要です。baseタグはヘッダ部分に入れてください。IE6では、ボディ部(<body>〜</body>)で設定されている場合でも動作していましたが、IE7では、動作しません。ヘッダ部(<head>〜</head>)に囲まれた部分に入れるようにしてください。JSファイルやCSSファイルを保護したい場合、ヘッダ部の中でも、それらのタグよりも上に配置させえてください。読み込むことになります。右クリックを禁止してください。baseタグを活用して画像のパスを隠そうとしても、右クリックされてしまえば終わりです。右クリック禁止は最低限行っていることが大前提の対策になります。false;">とすれば、たいていのブラウザで右クリック禁止が可能になります。右クリックを禁止できない一部のブラウザ(Opera)などのことを考慮するのであれば、SHTMLのご利用をお奨めいたします。SHTMLには、右クリック禁止を回避されたとしても、画像の本当のパスを右クリックでは分からなくする「画像保護機能」というものがあります。右クリックを行い、画像のプロパティを見てもダミー画像が表示されるようにできます。Encoder」には残念ながら存在しないので、「どこでもSHTML」というメニューを使います。「どこでもSHTML」は、任意の一部分のHTMLソースだけを暗号化できます。href="http://www.broadband-xp.com/hidesource/base123/">」だけを暗号化し、さらに画像保護機能や、ウインドウ名をチェックする機能を使ってみたのが、下記のサンプル4です。サンプル4(「どこでもSHTML」でbaseタグだけを暗号化+ダミー画像による画像保護機能)JavaScriptをoffにしている人のことを考慮してください。baseタグをJavaScriptによって外部ファイル化した場合、JavaScriptをoffにしている人は画像が表示されないことを意味します。CSSファイルを相対パスで指定しているのであれば、CSSファイルが読み込まれないため、レイアウトが崩れる可能性があります。JSファイルを相対パスで指定しているのであれば、JavaScriptが読み込まれないため、期待通りには動作しません。相対パスで他のページにリンクしているのであれば、そのリンクをたどることができません。問題なのがサーチエンジン・ロボットがそのリンクをたどることができないため、SEO上、問題が発生する場合があります。href="">)は絶対パス形式で指定する必要があろうかと思われます。その上で、「JavaScriptをoffにしているが故に画像が表示されていない」ことを理解してもらえるように、--------------------------------------------------------------------------------<noscript><b>このサイトは、JavaScriptが有効になっていることを前提に設計されています。JavaScriptを無効にされている場合には、画像は表示されません。JavaScriptを有効に設定してください。設定方法は、こちらをご参照ください。</b></noscript>--------------------------------------------------------------------------------のようなHTMLタグをHTMLソース内のbody部のできるだけ上の方に入れるようにされることをお勧めいたします。(もしくは、次項で説明するように、代替画像そのものの中で、JavaScriptの設定を有効にするように促しても良いでしょう。)JavaScriptをoffにしているユーザーからのアクセスに対しては、別のページにリダイレクト(転送)するように設定することもRSプロテクトでは可能ですが、この場合、サーチエンジン・ロボットも、その本来のページではなく、別のページをインデックスすることになりますので注意が必要です。サーチエンジン・ロボットと人間のアクセスを区別する方法がないわけではありませんが、サーチエンジン・スパム(クローキング/ドアウェイページ)と判定されてしまう可能性がありますのでお勧めできません。結論として、JavaScriptをoffにしているユーザーからのアクセスに対しては、最初は(=JavaScriptの設定を変更してもらうまでの間は)画像が表示されていなかったりレイアウトが崩れることがありうることを覚悟しなければならないことになります。404エラー(「ファイルが見つかりません。」)に対応するJavaScriptをoffにしているユーザーは、画像が表示されないということは、違うパスをサーバが探しに行っているからに他なりません。その結果、404エラーが発生します。JavaScriptをoffにしている場合にサーバが探しに行くであろうパスは想像できるのですから、最初から代替画像(「画像を表示させるためには、JavaScriptの設定を有効にしてください」というメッセージの書いた画像でもいい訳です。)を表示させるようにしても良いでしょう。サンプル3(JSファイルを難読化+暗号化させた例)で、JavaScriptの設定を有効にした場合とそうでない場合とでどのように表示結果が変わるかを試してみてください。4.結論このbaseタグを活用した画像のパス隠蔽工作は、ページ全体を暗号化しないで済むため、SEOにやさしいというメリットを享受することができます。それでいてソースを見られても画像の本当のパスが分からないため、単純な方法でありながら、非常にすぐれた手法であると言えます。JavaScriptをoffにしているユーザーにはそもそも画像が見えないので、右クリックしても画像は保存できません。「JavaScriptをoffにしたら右クリックでいくらでも画像を保存できるではないか?」という批判には応えることができるはずです。画像保護が主な目的の方には、最高の手法であると言えるかと思います。テキスト保護(テキスト本文/HTMLコーディングそのもの/外部ファイル化せずにHTML本体内に埋め込んだスタイルシート・JavaScript)などを主体に考えている場合には、「ソースを見られれば終わり」という問題をクリアすることはできません。仮にbaseタグの部分を暗号化しても、それでも絶対に漏れないかというと、そういうことはありません。余裕のある方は、下記の方法のいずれか(もしくは、その全て)を併用してみることを検討してみてください。a.ツールバー・メニューバーのないサブウインドウ内にコンテンツを表示させる右クリックを禁止しても、メニューからソースなどは表示できます。ソース自体を表示させられないように、ツールバー・メニューバーを消したウインドウ内にコンテンツを表示させると、プロテクトの強度がそれだけ上がります。2007」(30日間利用可能な体験版でも、制限事項なく利用可能です。Referer(参照元)をチェックする画像を表示させる場合、ブラウザが画像をサーバーにダウンロード要求をします。その際、Referer(参照元)を通常、サーバに送信します。Refererには、画像を読み込んでいるページ(HTMLファイル)が残ります。画像に直接アクセスしているならば、Refererが空になります。Refererが空であれば、HTMLファイルを介さずに直接アクセスしている(かもしれない)ことを意味し、画像をコピーしようと考えているアクセスである可能性が高いです。Refererをチェックすることで、一定の防御策になりえます。src="getimg.php?filename=hogehoge">などのように、PHP・CGI(Perl)などのサーバサイド・プログラムを介して画像を表示させる仕組みを取るのが普通です。.htaccessを用いて、ディレクトリー単位で、Refererの妥当性をチェックする方法を取ります。いずれにしましても、多少のプログラム経験が必要なことは、どちらの方法でも一緒です。Refererは偽装しようと思えば偽装できなくもないことはあらかじめ知っておく必要があるでしょう。問題なのは、セキュリティ製品やその設定、またブラウザの設定・Proxyサーバの設定によっては、ユーザーに悪意がなくてもRefererが遮断されている可能性があります。無実の人を犯人扱いしてしまう可能性がありますので、注意してください。画像のパスを定期的に変更するbaseタグで画像のパスを指定している場合に、もし高度な知識を持つ人間少数が先駆けて解読し、それのパスを不特定多数の人間に公開された場合、対策が無意味になります。画像のパスは定期的に変えておけば、このような情報も常に、古い間違った情報となります。画像置き場だからといって、「image」のような分かりやすいフォルダー名は避けるべきです。キャッシュ対策をするいくら、画像の本当のパスが分からないようにしても、キャッシュ対策をしていなければ無意味です。弊社でもそのようなプログラムのお手伝いをさせていただくことは可能です。サポート(件名は変えないでください。)まで、ご相談ください。baseタグが書かれたJSファイルを難読化・暗号化しない場合で、より強固なプロテクトを目指される場合は、JSファイルのキャッシュ対策も必須になってくるでしょう。HTMLソースを隠す方法」トップに戻る。