ここですべての人が述べたように:ユーザーはいつでも自分のブラウザで利用可能なアセットをダウンロードできます。実際、あなたのページが表示されれば、すでにダウンロードできます。
とにかく、あなたができることは、画像のURLを無効にすることによって、訪問者が2回目に配信した画像をダウンロードできないようにすることです。これには、サーバーで少しスクリプトを作成する必要があります。
HTMLページを配信するときは、ページへのリクエストごとに「保護」するすべての画像に一意のトークンを作成します。画像の識別子(サーバー上の画像のローカルパスやデータベース内の画像の表現のIDなど)と一緒にキャッシュ(またはデータベース)に保存します。画像の「実際の」URLをHTMLまたはJavaScriptに配置せず、代わりに次のようなものを使用します。<img src="http://yourdomain.com/images/#TOKEN" alt="protected image">
または<img src="http://yourdomain.com/images/imageHandler.jpg?requestID=#TOKEN" alt="protected image">
ブラウザは、imgのsrcURLからリソースを読み込もうとします。サーバーでそのリソースのリクエストを受け取った場合は、画像を配信し、トークンをすぐにキャッシュから削除します。キャッシュにトークンが見つからない場合は、「このリソースのダウンロードトークンはすでに使用されています」などのエラーページを表示します。
適切なキャッシュ制御ヘッダーを使用してイメージを配信するようにしてください(「キャッシュ制御のHTTP / 1.1ヘッダーフィールド定義」を参照)。これにより、ブラウザが画像をハードディスクに保存できなくなります。(注意:ブラウザは常にユーザーにとって最高のパフォーマンスを達成しようとするので、それを当てにしないでください。ただし、これはhttp-standardsによると必須のヘッダーであるため、ブラウザは画像のみを保存すると思います。メモリ内。)
このように、単に<img>
's srcをコピーしてダウンロードを試みるユーザーは、エラーページにたどり着きます。彼のブラウザは以前に画像のダウンロードにURLを使用したことがあるため、URLは無効になっています。
ちなみに、これはそれらのファイル共有とオンラインビデオストリームサービスのほとんどがダウンロードリンクを保護する方法です。リクエストとリソースごとに1つのトークンのみで、リソースが配信されるとすぐにトークンが削除されます。トークンがない場合、リソースはなく、リソースの実際のURLを明らかにする必要はありません。実際、「実際の」URLは必要ありません。
それでも、これは隠すことによるセキュリティです。ただし、80%の場合、これによりユーザーは画像をダウンロードできなくなります。