色々と考えてみた。
使うもの
javascript php .htaccess
※スクリーンショットは防げません
main.html - メインとなるページ。DBと連動したりするならphpで書く。
clone.php - postで受け取ったアドレスの画像を画像フォルダから複製して、複製画像のURLを返す
delete.php - postで受け取ったアドレスの複製画像を消す
/image/ - 画像フォルダ。実際はもっと分かりづらい名前に。元の画像はここに入れる。
/image/.haccess - 設定ファイル
/tmp/ - 仮画像保存フォルダ
/tmp/.haccess - 設定ファイル
流れ
ページにアクセス。呼び出す画像のファイル名は暗号化されているとする。
1:javascriptで仮ファイル名を作成(Math.ceil(Math.random()*10000000) + ".jpg"など)
2:ajaxで画像名、仮ファイル名をpost
3:clone.phpが/tmp/フォルダに、仮ファイルを作成。
4:returnで仮ファイル名のURLを取得
5:canvasに画像を書き出し
6:ajaxで仮ファイル名をpost
7.delete.phpが/tmp/フォルダの仮ファイルを削除
設定(特徴的な箇所のみ記述)
main.html
http://www.stylish-style.com/csstec/basic/g-photo-guard.html
こちらを参考に、canvasには透明gifをのせておく。
/tmp/.haccess
Header set Cache-Control "no-store"
Header set Pragma "no-store"
(注意)no-cacheではないです。
/image/.haccess
-deny from all
clone.php、delete.php
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') (ajax以外のアクセスでは動かないように)
結果
○右クリック、ドラッグ保存→透過gifでガード
○ソースコードを読む→読み込んだ仮画像は削除済
○キャッシュから拾う→キャッシュ防止済
元画像フォルダへのアクセスは、phpのみ可能にしておきます。
スクリーンショットは防げませんが、かなり防げるような。
javascriptが切られていると、ajaxが発動されないので画像のコピーが行われません。
ajaxでファイルのクローンを作るという動作を行っているので、
悪意のあるユーザーにビシバシpostされまくると危険かも。
ここでは書いていませんが、連続post対策は必須。
0 件のコメント:
コメントを投稿