誰もが一度は考えることの一つに「ネット上にアップロードした写真を誰かに保存されるのを防ぐことは可能か?」という問題がある。mixiやFacebook、Twitterなどのソーシャルネットワーキングサービスが普及したおかげで、今では自分のブログやウェブサイトなどを持つ必要なく、誰もがネット上に写真をアップロードする時代になった。自分の友人・知人などがそれらなどでプライベートな写真などをアップロードして掲載しているのを見ると、「非常に危ないなぁ」と私はいつも思う。Facebookにおいては実名込みだ。前掲のソーシャルなどでは写真の公開範囲を「友人のみ」などに限定することができてそれを利用している人が多いと思うが、だからといってネットでの流出を防げるかと言えば、答えはNoだろう。以前このブログでも書いた通りFacebookではアプリなどを利用して写真や名前などの個人情報を取得することは可能である。(参考記事は以下)Facebookの個人情報漏洩の危険性Facebookのスパムアプリから自分の個人情報を守る方法インターネットというのは基本的に開かれた世界なので、アップロードしておいてそれの流出を防ぎたいというのはそもそも矛盾しているのではないかと個人的には思う。Webブラウザがページを表示する原理また、インターネット上(サーバー)にあるページをパソコンもしくはスマートフォンなどで表示する際には、そのページのHTMLファイルや画像(写真)ファイルなどをすべて閲覧する端末(クライアント)側にダウンロードしている。そのデータを各端末にインストールされているウェブブラウザが解釈し、ディスプレイ上に表示しているわけだ。パソコンやスマートフォンなどの画面に表示された写真というのは一時的にであれその端末にダウンロードされているということになる。そこでその写真を保存するかどうかの選択肢はその端末側にあるわけだから、サーバー側でそれを規制するのは厳しい。流出して困るような写真などはネット上にアップロードするな。これを逆に表現すれば、ネット上にアップロードした写真は全世界に流出する可能性が必ずある。言ってもいいのではないでしょうか。それでも保存されるのを防ぎたい場合は?しかしそれでもネットにアップロードした写真が保存されるのを防ぎたいという要望があるのも事実である。前述の説明のように完全な防御は不可だが、保存されにくくすることは可能だ。簡単なのはJavaScriptで右クリックメニューを使用不可にしてしまうのが昔ながらの手っ取り早い手法である。画面上でマウスの右クリックを押すと以下の画像のようにアラートウインドウが表示されるアレだ。私はこれが昔から嫌いである。こっちは写真の保存などする気がなく、ただテキスト文字をコピーしようとしただけでもこれが出ることがある。こちらの操作を妨げられることが非常にウザい。一応そのやり方を書いておくと、以下の記述をHTMLファイルのbody要素の属性として追記しておけばOKという非常に簡単な手法だ。false;"しかしこんなものはちょっと知識のある人であればすぐに回避できるものなのでハッキリ言ってあまり意味がないうえに、前述の私の例のように画像ではなくテキスト文字をコピーしようとした際などの右クリックまでも規制してしまうので、トータルで考えるとデメリットのほうが大きいと思う。右クリック禁止スクリプトをダウンロードできますというわけで今回、ウェブページ上の画像のみを対象とした「右クリック禁止スクリプト」というものを簡易的に作ってみた。このスクリプトには弱点があり、右クリックだけでなくドラッグによる画像の保存をも禁止している影響で、画像がリンクになっている場合でもクリックを禁止してしまう。リンク先に画面偏移できなくなる。仕組みを具体的に言うと、HTMLファイル内のimg要素に対して右クリック禁止とドラッグ禁止を適用しているだけという非常に簡易的なものだ。リンク要素などを含むクリックさせたい画像に関しては、img要素を使わずに画像を表示させてね、ということになってしまう。リンク要素を含んでいる画像に関してはCSSで画像置換するなどして対応させる必要がある。時間をかけて作ればその弱点を克服することも可能だと思うが、そこまでする必要性が感じられないし面倒なので今回はこの状態のまま公開である。何度も言うが、ネット上にアップロードした時点で保存を完全に防ぐことは無理だし、閲覧者(ユーザー)側の操作を妨げるようなことは基本的にしたくないのですよ。http://www.1-firststep.com/samplephp/imagemenu/ダウンロードはこちらから。コンビニで缶コーヒーを飲みながらタバコを吸うのが日課の暗い人。ご質問やお便りはお問い合わせページからどうぞ。企画もの(使用に注意)全国のうんこ大好きなチビッコ達が大喜び。このボタンの詳しい説明はこちら。一度押すとスタート、もう一度押すとストップ。このボタンの詳しい説明はこちら。