HTML5ビデオのダウンロード(右クリックで保存)を禁止しますか?


171

ブラウザーの右クリックメニューから[名前を付けてビデオを保存...]を無効にして、クライアントがビデオをダウンロードできないようにするにはどうすればよいですか?

クライアントがファイルパスに直接アクセスできないようにする完全なソリューションはありますか?


3
HTML5ビデオの「右クリックを無効にする」方法を絶対に要求するだけので、私はこの質問に賛成票を投じました。通常の画像での右クリックによる無効化に似ているのか、適用可能な他のオーバーレイトリックなどがあるのか​​はわかりません。

3
右クリックを無効にしても、ブラウザメニュー(File→Save As)から保存できます。何らかの方法でそれをブロックできたとしても、ファイルのURLを見つけるためにソース表示できます。あなたがそれを少しあいまいにしても、彼らはそれをキャッシュから取り去ることができます。それを複雑にすることができたとしても(たとえば、ストリーム)、スニファーなどでネットワークトラフィックをキャプチャできます。実際、ユーザーに送信すると、ユーザーはそれを保存できます。それを回避する方法はありません。あなたが尋ねる必要がある質問は、なぜそれをそれほどひどく止める必要があるのか​​ということです。それは本当に必要なのでしょうか?努力と使い勝手の悪さの価値はありますか?
Synetech 2015

TxRegexが基本的な解決策として迅速に回答するのが好きです。
jsherk 2017

ここでは見た目をよく見ていきますが、「ダウンロード」という用語が多すぎます。もちろん、あなたがしたいですかビデオをダウンロードすることができるようにします。
JohanBoulé18年

回答:


226

あなたはできません。これは、ブラウザがコンテンツを配信するように設計されているためです。しかし、ダウンロードを難しくすることができます

まず最初に、イベント、つまり「右クリック」を無効にすることができます。これは、右クリックして[名前を付けて保存]を行うことで、通常のスキディが露骨にビデオをリッピングするのを防ぎます。ただし、JSを無効にして回避するか、ブラウザーのデバッガーを介してビデオソースを見つけることができます。さらに、これは悪いUXです。コンテキストメニューには、名前を付けて保存するだけでなく、正当なものがたくさんあります。contextmenu

カスタムビデオプレーヤーライブラリを使用することもできます。それらのほとんどは、好みに応じてコンテキストメニューをカスタマイズするビデオプレーヤーを実装しています。そのため、デフォルトのブラウザコンテキストメニューを取得できません。また、名前を付けて保存と同様のメニュー項目を提供する場合は、それを無効にすることができます。しかし、これもJSの回避策です。弱点は前のオプションと同様です。

これを行う別の方法は、HTTPライブストリーミングを使用してビデオを配信することです。それが本質的に行うことは、ビデオをチャンクに切り分けて次々に提供することです。これは、ほとんどのストリーミングサイトがビデオを提供する方法です。したがって、名前を付けて保存しても、ビデオ全体ではなく、チャンクのみを保存します。すべてのチャンクを収集し、いくつかの専用ソフトウェアを使用してそれらをステッチするには、もう少し手間がかかります。

別のテクニックは、ペイント<video>すること<canvas>です。この手法では、JavaScriptを少し使用すると、ページに表示されるのは<canvas>、非表示からのフレームをレンダリングする要素<video>です。また、これは<canvas>であるため、コンテキストメニューは<img>のメニューではなくのメニューを使用します<video>。[名前を付けて保存]ではなく[名前を付けて保存]を取得します。

また、CSRFトークンを利用することもできます。あなたはあなたのサーバーにそのページのトークンを送ってもらうでしょう。次に、そのトークンを使用してビデオをフェッチします。サーバーは、動画を配信する前に有効なトークンであるかどうかを確認するか、HTTP 401を取得します。アイデアは、ページからアクセスした場合にのみ取得できるトークンを取得することによってのみ、ビデオを取得できることであり、ビデオのURLに直接アクセスすることはありません。

結局のところ、自分の動画をYouTubeやVimeoなどのサードパーティの動画サイトにアップロードするだけです。彼らは優れたビデオ管理ツールを備えており、デバイスへの再生を最適化し、ビデオがあなたの側でゼロの努力でリッピングされるのを防ぐために努力しています。


1
詳細な回答ありがとうございます。少なくとも右クリックメニューから[名前を付けて保存]オプションを無効にすることはできますか?ほとんどの基本的な知識のケースをカバーします
python

2
それはブラウザに依存します。私は、ビデオが完全にロードされている場合、「保存」をクリックすると、再ダウンロードするのではなく、キャッシュからビデオを選択する(特にビデオがすでにキャッシュにダウンロードされている、なぜダウンロードするのか)ことを見てきました。もう一度?)、したがって、2番目の要求はありません。上記の方法は、リンクが再利用される場合にのみ適用できます。
ジョセフ

1
さて、divでビデオタグをオーバーレイすることについて話している記事を見つけました。私の回答を更新
ジョセフ

2
ありがとう。私はcraftymind.com/factory/html5video/CanvasVideo.htmlを読んでください。アイデアはあなたの答えとほとんど同じです。
Trung

1
@Cupidvogel「1回限りのURL」は、サーバーが生成したトークンを受け入れるサーバーエンドポイントです。トークンはページ生成時に生成され、データベースに保存されます。また、ページに同梱されているsrc<video>。ページが読み込まれるまでに、dbにはトークンがあり、ページにはトークンがあります。一度<video>負荷を開始する(エンドポイントにアクセスします)、サーバーをチェックトークンはデシベルである場合、それを削除し、ファイルをストリーミングします。2回目のアクセスの結果としてトークンが存在ない場合は、ファイルをストリーミングしないでください。
ジョセフ

118

これは、html5ビデオから右クリックの「保存」オプションを単に削除することを望む人々のためのシンプルなソリューションです。

$(document).ready(function(){
   $('#videoElementID').bind('contextmenu',function() { return false; });
});

すごいね !それは一般の人がビデオをダウンロードするのを防ぐのに素晴らしい仕事をします!
エティエンヌ・ノエル

2
ただし、ブラウザでJavaScriptが無効になっている場合、これは役に立ちません。
mvark 2014年

2
おかげで、このソリューションはすべての訪問者の90%に十分です。
カイノアック2014年

2
ブレー。Firebugで要素を調べ、src属性を確認し、別のタブで開くか、を使用wgetしてダウンロードしてください。
SexyBeast

11
これの主な目的は、「通常の」ユーザーがビデオをダウンロードしないようにすることです。これは、この状況を解決するための良い解決策です。
ウナペドラ2014

37

簡単な答え、

あなたはできません

彼らがあなたのビデオを見ているなら、彼らはすでにそれ持っています

それらを遅くすることはできますが、止めることはできません。


ちなみに、この答えはHTML5ビデオ、フラッシュビデオ、または将来想像できるあらゆるテクノロジーに当てはまります。それは簡単です:それがどのように機能するかです。
グスタボロドリゲス

そしてYouTubeはどうですか?YouTubeではビデオファイルを簡単に見つけることができません。つまり、そうですが、YouTubeまたは類似のビデオホスティングでmp4ソースを非表示にするのは、サーバーで単純なmp4をホストしてhtml5プレーヤーを使用するよりも簡単です。
dlopezgonzalez 2016年

2
それはどちらの質問に対する答えでもありません。
Tzshand 2016

1
人々は画面全体と音声を録音し、すべての回避策をだますことができるため、速度が低下するだけです。
金色黒井

1
@IlanSchemoul興味深い。共有してくれてありがとう:)
Starx

33

はい、これは3つのステップで実行できます。


  1. 保護するファイルを、コードが実行されているディレクトリのサブディレクトリに配置します。

    www.foo.com/player.html
    www.foo.com/videos/video.mp4

  2. 「.htaccess」という名前のサブディレクトリにファイルを保存し、以下の行を追加します。

    www.foo.com/videos/.htaccess

    #Contents of .htaccess
    
    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^http://foo.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.foo.com/.*$ [NC]
    RewriteRule .(mp4|mp3|avi)$ - [F]
    

これで、ソースリンクは役に立たなくなりましたが、ファイルをダウンロードしようとするユーザーにファイルを直接提供できないようにする必要があります。

  1. 以下のために、より完全なソリューション、今フラッシュプレイヤー(またはHTMLキャンバス)とビデオを提供し、直接ビデオにリンクすることはありません。右クリックメニューを削除するには、HTMLに追加します。

    <body oncontextmenu="return false;">


結果:

www.foo.com/player.html は正しくビデオを再生しますが、www.foo.com / videos / video.mp4にアクセスすると:

エラーコード403:FORBIDDEN


これは直接ダウンロード、cURL、ホットリンクで機能し、名前を付けます。

これは2つの質問に対する完全な回答であり、「ユーザーがすでにダウンロードしたビデオをユーザーがダウンロードするのを止めることはできますか」という質問に対する回答ではありません。


1
すばらしい回答ですが、.htaccessコンテンツから削除する必要がある `があります
MAZux

2
HTTPリファラーを偽造することもできます。これにより、人物がダウンロードできるようになります。ただし、これは非常に賢い解決策です。ファイルに1回限りのコードを入れてこれをまとめると、問題ありません。
Shiroy、2017

それでもIDMがダウンロードできるようです!
PersianMan

@PersianMan正解-最初の答えを読むことをお勧めします
Tzshand

1
ブラウザからJavaScriptを無効にすると、右クリックが有効になるため、このトリックは機能しません。これも回避するには、jqueryを使用して動画要素を動的にフェッチして読み込む必要があります。
Anindya Sankar Dasgupta

23

私が通常使用する最良の方法は非常にシンプルです。ページ全体のコンテキストメニューを完全に無効にします。純粋なhtml + javascript:

 <body oncontextmenu="return false;">

それでおしまい!右クリックでいつでもソースを確認できるので、これを行います。
「ブラウザの表示ソースを直接使用できます」というのは本当ですが、動画のダウンロードを停止できないという事実から始めますhtml5


ソリューションは、「通常の」ユーザーの邪魔にならないものである必要があると思います。右クリックを無効にすると、ユーザーがテキストをコピーして貼り付けたり、興味のある単語を検索したりできなくなります。すべてのユーザーがそうする可能性がありますが、一部のユーザーにとってはうっとうしいことがあります
John Balvin Arias

14

クライアント側の開発者として、ブロブURLの使用をお勧めします。ブロブURLは、バイナリオブジェクトを参照するクライアント側URLです。

<video id="id" width="320" height="240"  type='video/mp4' controls  > </video>

HTMLでは動画をsrc空白のままにし、JSではAJAXを使用して動画ファイルをフェッチし、応答タイプがblobであることを確認します

window.onload = function() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'mov_bbb.mp4', true);
    xhr.responseType = 'blob'; //important
    xhr.onload = function(e) {
        if (this.status == 200) {
            console.log("loaded");
            var blob = this.response;
            var video = document.getElementById('id');
            video.oncanplaythrough = function() {
                console.log("Can play through video without stopping");
                URL.revokeObjectURL(this.src);
            };
            video.src = URL.createObjectURL(blob);
            video.load();
        }
    };
    xhr.send();
}

注:この方法は大きなファイルにはお勧めしません

編集

  • 直接ダウンロードを回避するためにクロスオリジンブロックを使用する

  • 動画がAPIによって配信されている場合「GET」の代わりに別のメソッド(PUT / POST)を使用します


3
YouTubeもBlobを使用しています。
C0nw0nk 2017

1
ここで何が起こっているのか、サーバーをセットアップする方法をもっと明確に説明できますか?
Anthony

1
@nerdofcodeユーザーが動画を転送しようとすると、どのように動作しますか?ビデオがすべてダウンロードされるまで待つ必要がありますか?
John Balvin Arias

1
@JohnBalvinArias!私はこれを100%テストしていませんが、クイックバッファだけが必要だと言います...これについては引用しないでください...
NerdOfCode

1
ページを検査すると、[ネットワーク]タブで、新しいタブで開くことができるビデオのリクエストが表示されます。
Simone

10

PHPは、キーがランダムな文字列で値がファイル名であるセッションとともにhtml5ビデオタグを送信します。

ini_set('session.use_cookies',1);
session_start();
$ogv=uniqid(); 
$_SESSION[$ogv]='myVideo.ogv';
$webm=uniqid(); 
$_SESSION[$webm]='myVideo.webm';
echo '<video autoplay="autoplay">'
    .'<source src="video.php?video='.$ogv.' type="video/ogg">'
    .'<source src="video.php?video='.$webm.' type="video/webm">'
    .'</video>'; 

これで、PHPはビデオを送信するように求められます。PHPはファイル名を回復します。セッションを削除し、ビデオを即座に送信します。さらに、すべての「キャッシュなし」およびMIMEタイプのヘッダーが存在する必要があります。

ini_set('session.use_cookies',1);
session_start();
$file='myhiddenvideos/'.$_SESSION[$_GET['video']];
$_SESSION=array();
$params = session_get_cookie_params();
setcookie(session_name(),'', time()-42000,$params["path"],$params["domain"],
                                         $params["secure"], $params["httponly"]);
if(!file_exists($file) or $file==='' or !is_readable($file)){
  header('HTTP/1.1 404 File not found',true);
  exit;
  }
readfile($file);
exit:

ユーザーが新しいタブにURLをコピーしたり、コンテキストメニューを使用したりすると、運が悪くなります。


私はソリューションが好きです-それはOPの質問を解決します。残念なことに、がChromeのソースコードをチェックし、リンクを右クリックすると、ユーザーはHTMLファイルをダウンロードします。これは実際にはビデオファイルです。
user1252280 2017

5

少なくとも、技術に詳しくないユーザーが右クリックのコンテキストメニューを使用してビデオをダウンロードするのを止めることができます。oncontextmenu属性を使用して、任意の要素のコンテキストメニューを無効にすることができます。

oncontextmenu="return false;"

これは、body要素(ページ全体)または動画タグ内でそれを使用する単一の動画に対してのみ機能します。

<video oncontextmenu="return false;" controls>...</video>

5

有効期限が切れたURLでAWS CloudFrontを使用してしまいました。ビデオは読み込まれますが、ユーザーが右クリックして[名前を付けて保存]を選択するまでに、最初に受け取ったビデオのURLの有効期限が切れています。CloudFront Origin Access Identityを検索します。

ビデオURLを生成するには、AWS CLIで作成できるキーペアが必要です。ちなみにこれは私のコードではありませんが、うまく動作します!

$resource = 'http://cdn.yourwebsite.com/videos/yourvideourl.mp4';
$timeout = 4;

//This comes from key pair you generated for cloudfront
$keyPairId = "AKAJSDHFKASWERASDF";

$expires = time() + $timeout; //Time out in seconds
$json = '{"Statement":[{"Resource":"'.$resource.'","Condition" {"DateLessThan":{"AWS:EpochTime":'.$expires.'}}}]}';     

//Read Cloudfront Private Key Pair
$fp=fopen("/absolute/path/to/your/cloudfront_privatekey.pem","r"); 
$priv_key=fread($fp,8192); 
fclose($fp); 

//Create the private key
$key = openssl_get_privatekey($priv_key);
if(!$key)
{
    echo "<p>Failed to load private key!</p>";
    return;
}

//Sign the policy with the private key
if(!openssl_sign($json, $signed_policy, $key, OPENSSL_ALGO_SHA1))
{
    echo '<p>Failed to sign policy: '.openssl_error_string().'</p>';
    return;
}

//Create url safe signed policy
$base64_signed_policy = base64_encode($signed_policy);
$signature = str_replace(array('+','=','/'), array('-','_','~'), $base64_signed_policy);

//Construct the URL
$url = $resource.'?Expires='.$expires.'&Signature='.$signature.'&Key-Pair-Id='.$keyPairId;

return '<div class="videowrapper" ><video autoplay controls style="width:100%!important;height:auto!important;"><source src="'.$url.'" type="video/mp4">Your browser does not support the video tag.</video></div>';

1
過小評価されたコメント。しかし、最近はdocs.aws.amazon.com/sdk-for-php/v3/developer-guide/…を使用することを勧めします。
Zmart

トークンの有効期限が切れた場合、それは彼らがビデオをナビゲートできないことを意味しますか?これは動画のURLに再度連絡するようです。
Chud37

4

次のように、コンテキストメニューを非表示にすることで、これをそれほど簡単にできません。

<video oncontextmenu="return false;"  controls>
  <source src="https://yoursite.com/yourvideo.mp4" >
</video>

3

+1の簡単でクロスブラウザの方法:CSSのZインデックスと不透明度を使用して、ビデオの上に透明な画像を配置することもできます。したがって、ユーザーはコンテキストメニューに「動画を保存」ではなく「名前を付けて画像を保存」を表示します。


2
なぜ写真を読み込むのに時間がかかるので、divタグを置くだけで、バックリロードなどのクロムの大きなメニューが表示されます
Waqas Tahir

よくわかりませんが、それでもビデオは[ファイル]> [名前を付けて保存]からダウンロードできます
Arun Kumar

3

<body oncontextmenu="return false;"> 

動作しなくなりました。2018年6月現在のChromeとOperaには、直接ダウンロードできるようにタイムラインにサブメニューがあり、ユーザーはそのビデオをダウンロードするために右クリックする必要はありません。興味深いことに、FirefoxとEdgeにはこれがありません...


2

Vimeoなどのサービスを使用する:サインインしVimeo > Goto Video > Settings > Privacy > Mark as Secured、埋め込みドメインも選択します。埋め込みドメインが設定されると、指定されたドメインから接続しない限り、だれもがビデオを埋め込んだり、ブラウザから表示したりできなくなります。したがって、iframeにVimeoプレーヤーをロードするサーバー上で保護されているページがある場合、これは回避をかなり困難にします。


2

まず、動画のダウンロードを完全に防ぐことは不可能であることを理解してください。できることは、動画をより難しくすることです。つまり、ビデオのソースを非表示にします。

Webブラウザーは一時的にビデオをバッファーにダウンロードするため、ダウンロードを妨げる可能性がある場合は、ビデオの表示も妨げられます。

また、世界の総人口の1%未満がソースコードを理解して、とにかく安全にすることができることも知っておく必要があります。-それはあなたにもソースでそれを隠すべきではないという意味ではありません、あなたがしなければなりません

あなたはすべきではない無効に右クリックをし、さらに少ないあなたは、というメッセージが表示されます"You cannot save this video for copyright reasons. Sorry about that."この回答で示唆されているように

これは、ユーザーにとって非常に煩わしく混乱する可能性があります。それとは別に; 彼らは彼らのブラウザでJavaScriptを無効にした場合、彼らはなります右クリックのことができるようにと、とにかく保存します。

使用できるCSSトリックは次のとおりです。

video {
    pointer-events: none;
}

ブラウザでCSSをオフにすることはできません。実際に右クリックを無効にすることなくビデオを保護します。ただし、1つの問題はcontrols有効にできないことfalseです。つまり、に設定する必要があります。独自の再生/一時停止機能を実装する場合、またはvideoタグとは別のボタンを持つAPIを使用する場合、これは実現可能なオプションです。

controls また、ダウンロードボタンがあるので、それを使用することもあまりお勧めできません。

ここでJSFiddleの例。


JavaScriptを使用して右クリックを無効にする場合は、ビデオのソースもJavaScriptに保存します。これにより、ユーザーがJavaScriptを無効にした場合(右クリックが可能)、ビデオは読み込まれません(ビデオソースが少しよく非表示になります)。

TxRegexの回答から:

<video oncontextmenu="return false;" controls>
    <source type="video/mp4" id="video">
</video>

JavaScript経由で動画を追加します。

document.getElementById("video").src = "https://www.w3schools.com/html/mov_bbb.mp4";

機能的なJSFiddle


右クリックを防ぐ別の方法は、embedタグを使用することです。ただし、これはビデオを実行するためのコントロールを提供しないため、JavaScriptで実行する必要があります。

<embed src="https://www.w3schools.com/html/mov_bbb.mp4"></embed>

1
JavaScriptを介してsrc URLを追加することはあまり役に立ちません。スクリプトが設定した後、DOMを検査すると、URLが一目でわかります。
Simone、

@Simone同意しますが、htmlソースで直接表示するよりも優れています。右クリックすると、すぐに表示されます。あなたはいつもURLを分割するか、それを暗号化することができます。ただし、これは追加の処理であることを覚えておいてください
Simon

「ブラウザーでCSSをオフにできない」-技術的には、Webブラウザー開発者ツールでCSSを変更して特定のCSSルールを無効にすることができるため、より技術に詳しい人が削除できるpointer-events: none;
Phil Gibbins

2

まあ、100%保護することはできませんが、難しくすることはできます。私が説明しているこれらのメソッドは、PluralSightBestDotNetTrainingで保護メソッドを研究しているときに直面しました。それにもかかわらず、これらの方法のいずれでも、私が欲しいものをダウンロードするのを妨げることはありませんでしたが、ダウンローダーを保護してそれらの保護に合格するのに苦労しました。

コンテキストメニューを無効にする他の方法に加えて。ユーザーは引き続きInternetDownload Managerなどのサードパーティツールや他の同様のソフトウェアを使用してビデオをダウンロードできます。ここで説明する保護方法は、これらのサードパーティソフトウェアを軽減することです。

これらの方法のすべての要件は、誰かがあなたのビデオをダウンロードしていることを識別したときにユーザーをブロックすることです。この方法では、ユーザーがWebサイトへのアクセスを禁止する前にのみ、1つまたは2つのビデオしかダウンロードできません。

免責事項

誰かがこれらの方法を悪用したり、他の人や私が例として挙げたウェブサイトに害を及ぼすためにそれを使用した場合、私は一切の責任を負いません。知識を共有して、知的製品を保護するのに役立ちます。

有効期限付きのリンクを生成する

この要件は、ユーザーごとにダウンロードリンクを作成することです。Azure BlobストレージまたはAmazon S3で簡単に処理できること。動画の長さの有効期限の2倍のタイムスタンプを持つダウンロードリンクを作成できます。次に、そのビデオリンクと要求された時間をキャプチャする必要があります。これは次のメソッドに必要です。このメソッドの難点は、ユーザーが再生ボタンをクリックしたときにダウンロードリンクが生成されることです。

再生ボタンイベントでは、サーバーにリクエストを送信し、リンクを取得してソースを更新します。

ビデオリクエストレートを絞る

次に、ユーザーが2番目のビデオを要求する速度を監視します。ユーザーがダウンロードリンクを要求する速度が速すぎる場合は、すぐにブロックします。動画を閲覧しているだけのユーザーを誤ってブロックする可能性があるため、このしきい値を大きくしすぎることはできません。

HTTP範囲を有効にする

videojsなどのjsライブラリを使用してビデオを再生します。また、ヘッダーでAcceptRangeを返す必要があります。Azure Blob Storageは、すぐにこれをサポートします。このようにして、ブラウザはチャンクごとにビデオチャンクのダウンロードを開始します。通常、32バイトx 32バイトです。次に、videojsのtimeupdate変更をリッスンし、ビデオが視聴された割合についてサーバーを更新する必要があります。動画が視聴される割合は、動画が配信される割合を超えることはできません。パーセンテージの変更を受け取らずにビデオコンテンツを配信する場合は、ユーザーをブロックできます。確かに彼らはダウンロードしています。

ユーザーがビデオを前後にスキップできるため、これを実装するのは注意が必要です。実装するときは、このことを意識してください。

これがBestDotnetTrainingが処理する方法です timeupdate

myPlayer.ready(function () {
    //var player = this;
    this.src({
        type: "video/mp4",
        src: videoURL
    });
    if (videoId) {
        myPlayer.play();
        this.on('timeupdate', function () {
            var currentPercent = parseInt(100 * myPlayer.currentTime() / myPlayer.duration());//calcualte as percentage
            if (currentPercent % 5 == 0) {
                //send percentage to server 
                SaveVideoDurationWatched(currentPercent, videoId);
            }
        });
    }

});

とにかく、ユーザーはストリーミングを介してファイルをダウンロードするいくつかのダウンロード方法を使用してこれを回避することができます。ほとんどc#はそのままで実行でき、nodejsの場合はrequestモジュールを使用できます。次に、stopWatchを開始し、受信したパッケージをリッスンし、受信した合計バイトを合計サイズと比較する必要があります。このようにして、パーセンテージとそのパーセンテージを取得するために費やされた時間を計算できます。次に、Thread.Sleep()またはそのようなものを使用して、ビデオを正常に視聴する場合に待機する必要がある量のスレッドを遅らせます。また、スリープの前に、ユーザーはサーバーを呼び出して、受信したパーセンテージを更新できます。したがって、サーバーはユーザーが実際にビデオを見ていると考えます。

計算は次のようになります。たとえば、これまでに1%を受け取ったことを計算した場合、ダウンロードスレッドをスリープするために待機する必要がある量を計算できます。この方法では、実際の長さよりも速くビデオをダウンロードすることはできません。動画が24分の場合。ダウンロードには24分かかります。(プラス、最初の方法で設定したしきい値)

original video length 24 minute
24 min *60000 = 1,440,000 miliseconds 
1,440,000 % 100 = 14,400 milisecond is needed to download one percent

ブラウザエージェントを確認する

Webページを提供し、ビデオリンクを提供するとき、または進行状況の更新要求を受け入れるときは、ブラウザーエージェントを確認できます。異なる場合は、ユーザーを禁止します。

一部の古いブラウザはこの情報を渡さないことに注意してください。そのため、動画リクエストとウェブページリクエストの両方にブラウザエージェントがない場合は、これを無視してください。しかし、1つの要求にそれがあり、別の要求にはない場合は、ユーザーを禁止する必要があります。

これを回避するには、ユーザーは、ダウンロードリンクのキャプチャに使用しているヘッドレスブラウザと同じように、ブラウザエージェントヘッダーを手動で設定できます。

リファラーヘッダーを確認する

リファラーがホストURLまたはビデオを提供しているページURL以外の場合、ダウンロードリンクを別のタブまたは別のアプリケーションに配置するため、ユーザーを禁止できます。進行状況の更新要求に対してもそれを行うことができます。

このための要件は、ビデオとそのビデオを表示するページのマッピングを持つことです。規約やパターンを作成して、URLがどうあるべきかを理解することができます。デザイン次第です。

それを回避するために、ユーザーはビデオをダウンロードするときに、ダウンロードページURLに等しいリファラーヘッダーを手動で設定できます。

リクエスト間の時間を計算する

リクエストの数が多く、リクエスト間の時間が同じである場合は、ユーザーをブロックする必要があります。ビデオリンク生成リクエスト間の時間をキャプチャするには、これを配置する必要があります。それらが同じで(プラス/マイナスのしきい値)、それが何度も発生する場合は、ユーザーを禁止できます。ウェブサイトや動画をクロールするボットがある場合、通常、リクエストとリクエストの間のスリープ時間は同じです。たとえば、各リクエストを受け取った場合、たとえば1.3(プラス/分、ある程度の偏差)分ごと。次に、アラームを発生させます。このため、いくつかの統計計算を使用して、要求間の偏差を知ることができます。

これを回避するために、ユーザーは要求の間にランダムなスリープ時間を置くことができます。

サンプルコード

途中で実行しているレポPluralSight-Downloaderがあります。私はこのリポジトリを5年ほど前に作成しました。学習目的と個人的な使用のみを目的として作成したため、これまでのところレポは更新されておらず、更新したり操作しやすくしたりすることはありません。これは、それを行う方法の単なる例です。



1

短い答え: youtubeのようにリンクを暗号化します。youtube/ googleにそれをどのように行うか尋ねる以外に方法はわかりません。(あなたが要点にまっすぐに行きたい場合のために。)

私はこれが可能であることを誰にでも指摘したいのですが、YouTubeが他のWebサイトでも可能であり、他のWebサイトでもそうである場合、それはブラウザーからではありません。MicrosoftEdgeやInternet Explorerなどのいくつかのブラウザーでテストしたためです。だからそれを無効にする方法があり、人々がまだそれを言うのを見た...私が答えを探してみるのは、YouTubeがそれよりもできるなら、方法を確認する唯一の方法は誰かが調べた場合にあるからだ私が今やっているyoutubeのスクリプト。また、それがカスタムコンテキストメニューであるかどうかも確認しましたが、そうではありません。コンテキストメニューが検査要素を流しすぎているためです。つまり、検査要素の上にあるように見え、見ただけで新しいクラスも作成されません。実際には、javascriptでinspect要素にアクセスすることは不可能であるため、アクセスすることはできません。YouTube動画をダブルクリックすると、Chromeのコンテキストメニューがポップアップ表示されます。その上... YouTubeはその機能を追加しません。YouTubeのソースを調べて調べているので、答えを見つけたら戻ってきます...できないと言う人がいたら、彼らはそうしませんでした私のように研究をする。YouTubeビデオをダウンロードする唯一の方法は、ビデオをダウンロードすることです。

わかりました...私は調査しましたが、JavaScriptがなければそれを無効にすることができます...あなたはそれを無効にできるようにビデオへのリンクを暗号化できる必要がありますそれが見つからない場合、ブラウザーはそれを表示しません。また、YouTubeビデオリンクを開いたときに、「blob:https : //www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"引用符がないため、暗号化されているため保存できません...そのためのphpを知る必要がありますが、難しくするために選んだ答えのように、youtubeはそれを暗号化するのが最も難しいので、あなたはphpプログラマーを進めますが、あなたがそれをダウンロードするのを難しくする最良の答えとして選んだ人を選ぶよりもあなたがそれを知らない場合...しかし、phpを知っている場合は、ビデオリンクを重い暗号化して、それだけで読むことができますあなたのもの...私は彼らがどのようにそれを行うかを説明する方法がわかりませんが、彼らはそうしました、そして方法があります。YouTubeがそこにビデオを暗号化する方法は非常に賢いので、あなたは単にyoutube / googleに方法を尋ねるよりも知りたい場合彼らはそれをしています...あなたがすでに最良の答えを選んだとしても、これがあなたのために役立つことを願っています。


0

フレームをストリーミングし、キャンバスのようなものにそれらを描くように、WebSocketを介してビデオをストリーミングすることは実行可能なオプションのようです。

JavaScriptを使用したWebSocket経由のビデオストリーミング

これは、クライアントがビデオを取得するのをより困難にする別のレベルの保護を提供し、もちろん、[名前を付けてビデオを保存...]右クリックコンテキストメニューオプション(やりすぎ?!)で問題を解決すると思います。


0

これが私がしたことです:

function noRightClick() {
      alert("You cannot save this video for copyright reasons. Sorry about that.");
}
    <body oncontextmenu="noRightClick();">
    <video>
    <source src="http://calumchilds.com/videos/big_buck_bunny.mp4" type="video/mp4">
    </video>
    </body>
これは、画像、テキストなど、ほとんど何でも機能します。ただし、キーボードショートカットを使用して、[検査]および[ソースの表示]ツールに引き続きアクセスできます。(上の答えが言うように、完全に止めることはできません。)しかし、それらを止めるために障壁を上げることを試みることができます。


-1

@ Clayton-Graulには探していたものがありましたが、AngularJSを使用するサイトにCoffeeScriptバージョンが必要でした。必要な場合に備えて、問題のAngularJSコントローラーに次のように入力します。

    # This is how to we do JQuery ready() dom stuff
    $ ->
        # let's hide those annoying download video options.
        # of course anyone who knows how can still download
        # the video, but hey... more power to 'em.
        $('#my-video').bind 'contextmenu', -> 
            false

「奇妙なことがサークルkに向かっている」(それは本当です)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.