「透かし」のないコピーから画像を保護する-愚か者からの保護

ほとんどのWebプログラマーは、遅かれ早かれ、配布のためにイメージをコピーから保護するという問題に直面しています。 通常、これはGDの助けを借りて解決されます。たとえば 、コンテキストメニューをブロックすることで、またはCtrlキーを押すことで、目的の写真に「 www。%Sitename%.ru 」のような大きな透明ラベルを彫刻するか、画質を大幅に下げることで解決できます。



かつて、同様の質問がありましたが、「透かし」または「品質劣化」オプションが受け入れられなかったとき、私は混乱し、いくつかの解決策を思いつきました。 もちろん、これは万能薬ではありません(必要な人は誰でもそれをやってのけるでしょう)が、「愚か者に対する防御」として、強打に対処します。



誰も気にしない、猫へようこそ。



根拠にならないように、すぐに例を挙げてから、詳細に分析します。



すぐに予約します。残念ながら、ページをSafariにWebアーカイブとして保存しても役に立ちません。



デブリーフィング



Js

コンテキストメニューとCtrlキーをロックします。

 document.oncontextmenu = new Function("return false"); //    $(window).keypress(function(event){blockKey(event);}); //     $(document).keypress(function(event){blockKey(event);}); //     function blockKey(event){ keyCode = event.keyCode; if (keyCode == '155'){ //  , .. PrintScreen     ,     -       alert('printscreen'); } if (keyCode == '17'){ //  Ctrl alert(' .'); } } 
      





document.oncontextmenu = new Function("return false"); // $(window).keypress(function(event){blockKey(event);}); // $(document).keypress(function(event){blockKey(event);}); // function blockKey(event){ keyCode = event.keyCode; if (keyCode == '155'){ // , .. PrintScreen , - alert('printscreen'); } if (keyCode == '17'){ // Ctrl alert(' .'); } }







*便宜上、ほとんど常にjQueryを使用しています。



HTML

ブラウザに何もキャッシュする必要がないことを伝え、コンテンツの関連性は前世紀に終了しました:

 <meta http-equiv="Expires" content="Fri, Jan 01 1997 05:00:00 GMT"> <meta http-equiv="Pragma" content="no-cache"> 
      





<meta http-equiv="Expires" content="Fri, Jan 01 1997 05:00:00 GMT"> <meta http-equiv="Pragma" content="no-cache">







保護する画像をdivの背景として表示し、その中に透明な1x1ピクセルの画像を含むimgタグを挿入します。

 <div style="width: 1000px; height: 70px; background:url(index.php?showImg=84f5452a1fb1625ba0e251646049a60a) no-repeat;"> <img src="fail.gif" alt="" style="width: 1000px; height: 70px;" oncontextmenu="return false;"> </div> 
      





<div style="width: 1000px; height: 70px; background:url(index.php?showImg=84f5452a1fb1625ba0e251646049a60a) no-repeat;"> <img src="fail.gif" alt="" style="width: 1000px; height: 70px;" oncontextmenu="return false;"> </div>









Php

インデックスファイルに渡されるパラメーター「showImg = 84f5452a1fb1625ba0e251646049a60a」に気づいたと思います。 それがどのように形成され、なぜそれが必要なのかを理解するためにPHPコードに目を向けましょう:

 <?php session_start(); if (!$_GET['showImg']){ //     $_SESSION['imageId'] = md5(date('ymd H:i:s').rand()); //      Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //   Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 Header("Pragma: no-cache"); // HTTP/1.1 Header("Last-Modified: ".gmdate("D, d MYH:i:s")."GMT"); //   ?> // ...  html- <?php } if ($_GET['showImg']){ //       "   " include_once('./hana_kartinke.php'); echo hana($_GET['showImg']); } ?> 
      





<?php session_start(); if (!$_GET['showImg']){ // $_SESSION['imageId'] = md5(date('ymd H:i:s').rand()); // Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 Header("Pragma: no-cache"); // HTTP/1.1 Header("Last-Modified: ".gmdate("D, d MYH:i:s")."GMT"); // ?> // ... html- <?php } if ($_GET['showImg']){ // " " include_once('./hana_kartinke.php'); echo hana($_GET['showImg']); } ?>







スクリプト「hana_kartinke.php」の内容:

 <?php session_start(); function hana($code){ if ($code == $_SESSION['imageId']){ //      session_destroy(); //   $_SESSION['imageId'] = 'fail'; //      $assa = file_get_contents('./habr.jpg'); //      ,    }else{ $assa = 'Epic fail! =)'; //     ,    } return $assa; //       } ?> 
      





<?php session_start(); function hana($code){ if ($code == $_SESSION['imageId']){ // session_destroy(); // $_SESSION['imageId'] = 'fail'; // $assa = file_get_contents('./habr.jpg'); // , }else{ $assa = 'Epic fail! =)'; // , } return $assa; // } ?>









結果



ユーザーは画像を表示しますが、コンテキストメニュー(ブロックされている)、コピーアンドペースト(Ctrlでブロック)、またはFile \ Saveページとして保存することはできません。HTMLソースからリンクをクリックして画像を表示しようとすると、意味のある碑文が表示されます「壮大な失敗! =) "。



原則として、この方法はGD(透かしおよび品質低下)と組み合わせて使用​​することもできます。 しかし、私の意見では、これは妄想です。



この情報が誰かに役立つことを願っています。



UPD

私は繰り返します-これは万能薬ではなく、これは愚か者からの保護です。



UPD 2

批評家とマイナスの人のために、私はポイントを明確にしたい:私は長い間マーケティングに従事し、オンライン調査のプログラミングに従事していた。マーケティングの世界には1つの権威ある組織があります-ESOMAR、その要件(オンライン調査に関して)にはコンテンツ(写真、ビデオなど)がユーザーによって保存されることはありませんが、視覚的には目立たないようにする必要があります(つまり、透かしや品質カットがない)。



インターネット上の何かを保護することは不可能であることは明らかです(特にエンドユーザーが既に同じキャッシュにアクセスしている場合)。しかし、これらの要件をキャンセルした人はいません。 この記事では、同様の状況に対する解決策について説明しています。



All Articles