Mencegah video HTML5 diunduh (klik kanan disimpan)?

171

Bagaimana cara menonaktifkan "Simpan Video Sebagai ..." dari menu klik kanan browser untuk mencegah klien mengunduh video?

Apakah ada solusi yang lebih lengkap yang mencegah klien mengakses jalur file secara langsung?

ular sanca
sumber
3
Saya memilih pertanyaan ini karena hanya menanyakan cara "menonaktifkan klik kanan" untuk video HTML5. Saya tidak yakin apakah ini mirip dengan penonaktifan klik kanan untuk gambar normal atau jika ada trik overlay lainnya, dll., Yang dapat diterapkan.
3
Bahkan jika Anda menonaktifkan klik kanan, mereka masih dapat menyimpannya dari menu browser ( File→Save As). Bahkan jika Anda entah bagaimana dapat memblokirnya, mereka dapat melihat-sumber untuk menemukan URL file. Bahkan jika Anda bisa mengaburkannya sedikit, mereka dapat merobeknya dari cache. Bahkan jika Anda dapat menyulitkan itu (misalnya, streaming), mereka dapat menangkap lalu lintas jaringan dengan sniffer atau sesuatu. Faktanya adalah, jika Anda mengirimnya ke pengguna, mereka dapat menyimpannya. Tidak ada jalan lain. Pertanyaan yang perlu Anda tanyakan adalah mengapa Anda harus menghentikannya dengan sangat buruk. Apakah ini benar-benar perlu? Apakah ini sepadan dengan usaha dan ke-tidak-gunaan-pengguna?
Synetech
Saya suka TxRegex menjawab yang terbaik sebagai solusi dasar cepat.
jsherk
Saya akan terlihat luar biasa di sini, tetapi Anda kelebihan istilah "unduh". Anda tentu saja ingin agar video dapat diunduh.
Johan Boulé

Jawaban:

226

Anda tidak bisa . Itu karena itulah yang dirancang untuk dilakukan oleh browser: Sajikan konten . Tetapi Anda dapat membuatnya lebih sulit untuk diunduh .

Hal pertama yang pertama, Anda dapat menonaktifkan contextmenuacara tersebut , alias "klik kanan". Itu akan mencegah skiddie biasa Anda secara terang-terangan merobek video Anda dengan mengklik kanan dan Save As. Tapi kemudian mereka bisa menonaktifkan JS dan menyiasati ini atau menemukan sumber video melalui debugger browser. Plus ini UX buruk. Ada banyak hal yang sah dalam menu konteks daripada hanya Save As.

Anda juga dapat menggunakan perpustakaan pemutar video khusus. Sebagian besar dari mereka menerapkan pemutar video yang menyesuaikan menu konteks sesuai keinginan Anda. Jadi Anda tidak mendapatkan menu konteks browser default. Dan jika pernah mereka menyajikan item menu yang mirip dengan Save As, Anda dapat menonaktifkannya. Tetapi sekali lagi, ini adalah solusi JS. Kelemahannya mirip dengan opsi sebelumnya.

Cara lain untuk melakukannya adalah melayani video menggunakan HTTP Live Streaming . Apa yang dasarnya dilakukan adalah memotong video menjadi potongan-potongan dan menyajikannya satu demi satu. Ini adalah cara sebagian besar situs streaming menyajikan video. Jadi, bahkan jika Anda berhasil menyimpan Sebagai, Anda hanya menyimpan sepotong, bukan seluruh video. Butuh sedikit usaha lebih untuk mengumpulkan semua potongan dan menjahitnya menggunakan beberapa perangkat lunak khusus.

Teknik lain adalah untuk melukis <video>di<canvas> . Dalam teknik ini, dengan sedikit JavaScript, apa yang Anda lihat pada halaman adalah <canvas>elemen yang merender frame dari yang tersembunyi <video>. Dan karena ini adalah <canvas>, menu konteks akan menggunakan <img>menu 's, bukan <video>' s. Anda akan mendapatkan Save Image As sebagai ganti Save Video As.

Anda juga bisa menggunakan token CSRF untuk keuntungan Anda. Anda akan meminta sever Anda mengirimkan token pada halaman tersebut. Anda kemudian menggunakan token itu untuk mengambil video Anda. Server Anda memeriksa untuk melihat apakah itu token yang valid sebelum menyajikan video, atau mendapatkan HTTP 401 . Idenya adalah bahwa Anda hanya bisa mendapatkan video dengan memiliki token yang hanya bisa Anda dapatkan jika Anda berasal dari halaman, tidak secara langsung mengunjungi url video.

Pada akhirnya, saya hanya mengunggah video saya ke situs video pihak ketiga, seperti YouTube atau Vimeo. Mereka memiliki alat manajemen video yang bagus, mengoptimalkan pemutaran ke perangkat, dan mereka berupaya mencegah video mereka robek dengan upaya nol di pihak Anda.

Joseph
sumber
1
terima kasih atas jawaban terinci, apakah mungkin setidaknya menonaktifkan opsi simpan sebagai dari menu klik kanan? itu akan mencakup sebagian besar kasus pengetahuan dasar
python
2
itu tergantung pada browser. Saya telah melihat waktu (terutama firefox dan chrome) bahwa jika video sudah dimuat penuh, ketika Anda menekan "save" mereka hanya memilih video dari cache alih-alih mengunduh ulang (video sudah diunduh dalam cache, mengapa mengunduhnya lagi?), dengan demikian tidak ada permintaan kedua. metode di atas hanya berlaku ketika tautan digunakan kembali.
Joseph
1
baik, saya menemukan artikel yang berbicara tentang overlay tag video dengan div. memperbarui jawaban saya
Joseph
2
Terima kasih. Saya baru saja membaca craftymind.com/factory/html5video/CanvasVideo.html . Idenya hampir sama dengan jawaban Anda.
Trung
1
@Cupidvogel "onetime use url" adalah titik akhir server yang menerima token yang dihasilkan server. Token dihasilkan setelah pembuatan halaman, dan disimpan ke db. Itu juga dikirim dengan halaman srcpada <video>. Pada saat halaman Anda dimuat, db memiliki token, halaman tersebut memiliki token. Setelah <video>mulai memuat (Mengakses titik akhir), server memeriksa apakah token ada di db, menghapusnya dan mengalirkan file. Jika token tidak ada karena akses kedua , maka jangan streaming file.
Joseph
118

Ini adalah solusi sederhana bagi mereka yang hanya ingin menghapus klik kanan "save" dari video html5

$(document).ready(function(){
   $('#videoElementID').bind('contextmenu',function() { return false; });
});
Clayton Graul
sumber
Itu luar biasa! Itu sangat membantu mencegah orang biasa mengunduh video!
Etienne Noël
2
Namun ini tidak membantu jika JavaScript dinonaktifkan di browser.
mvark
2
Terima kasih, solusi ini cukup untuk 90% dari semua pengunjung kami.
Kai Noack
2
Bleh. Cukup periksa elemen di Firebug, lihat srcatributnya, dan buka di tab lain atau gunakan wgetuntuk mengunduhnya!
SexyBeast
11
Saya pikir tujuan utama ini adalah untuk menghindari pengguna "normal" mengunduh video. Ini adalah solusi yang bagus untuk menyelesaikan situasi ini.
Unapedra
37

Jawaban sederhana,

ANDA TIDAK BISA

Jika mereka menonton video Anda, mereka sudah memilikinya

Anda bisa memperlambatnya tetapi tidak bisa menghentikannya.

Starx
sumber
Omong-omong, jawaban ini berlaku dengan video HTML5, video flash, atau teknologi apa pun yang dapat Anda bayangkan di masa depan. Sederhana: ini cara kerjanya.
Gustavo Rodrigues
Dan bagaimana dengan youtube ?, di youtube Anda tidak dapat menemukan file video dengan mudah. Maksud saya ok, Anda benar, kami bisa, tetapi dengan mudah menyembunyikan sumber mp4 di youtube atau hosting video serupa daripada meng-host mp4 sederhana di server kami dan menggunakan pemutar HTML5.
dlopezgonzalez
2
Itu bukan jawaban untuk salah satu pertanyaan.
Tzshand
1
Orang-orang dapat merekam seluruh layar dan audio mereka dan mengelabui semua solusi, itu sebabnya mereka hanya bisa diperlambat.
kintsukuroi
1
@IlanSchemoul Menarik. Terima kasih telah berbagi :)
Starx
33

Ya, Anda bisa melakukan ini dalam tiga langkah:


  1. Tempatkan file yang ingin Anda lindungi dalam subdirektori direktori tempat kode Anda dijalankan.

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

  2. Simpan file di subdirektori yang bernama ".htaccess" dan tambahkan baris di bawah ini.

    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]

Sekarang tautan sumber tidak berguna , tetapi kami masih perlu memastikan bahwa setiap pengguna yang mencoba mengunduh file tidak dapat langsung melayani file tersebut.

  1. Untuk solusi yang lebih lengkap , sekarang sajikan video dengan flash player (atau kanvas html) dan jangan pernah menautkan ke video secara langsung. Untuk hanya menghapus menu klik kanan, tambahkan ke HTML Anda:

    <body oncontextmenu="return false;">


Hasil:

www.foo.com/player.html akan memutar video dengan benar , tetapi jika Anda mengunjungi www.foo.com/videos/video.mp4:

Kode Kesalahan 403: DILARANG


Ini akan berfungsi untuk unduhan langsung, CURL, hotlinking, apa saja.

Ini adalah jawaban lengkap untuk dua pertanyaan yang diajukan dan bukan jawaban untuk pertanyaan: "bisakah saya menghentikan pengguna dari mengunduh video yang telah mereka unduh."

Tzshand
sumber
1
Jawaban yang bagus, tetapi Anda memiliki `bahwa Anda harus menghapusnya dari .htaccesskonten Anda
MAZux
2
Anda masih dapat memalsukan Referer HTTP, yang akan memungkinkan seseorang untuk mengunduh. Namun, ini adalah solusi yang sangat cerdas. Jika Anda klub ini dengan kode satu kali pada file, Anda baik untuk pergi!
Shiroy
Sepertinya IDM masih bisa mengunduhnya!
PersianMan
@PersianMan Benar - Saya mendorong Anda untuk membaca jawaban pertama
Tzshand
1
Jika Anda menonaktifkan javascript dari browser, maka trik ini tidak akan berfungsi, sejak itu klik kanan diaktifkan. Untuk menghindarinya juga, Anda harus mengambil dan memuat elemen video secara dinamis menggunakan jquery.
Anindya Sankar Dasgupta
23

Cara terbaik yang biasanya saya gunakan adalah sangat sederhana, saya sepenuhnya menonaktifkan menu konteks di seluruh halaman, html + javascript murni:

 <body oncontextmenu="return false;">

Itu dia! Saya melakukan itu karena Anda selalu dapat melihat sumbernya dengan klik kanan.
Oke, Anda berkata: "Saya bisa menggunakan langsung sumber tampilan browser" dan itu benar tetapi kami mulai dari kenyataan bahwa Anda TIDAK BISA berhenti mengunduh html5video.

Daniele Cannova
sumber
Saya pikir solución haruslah salah satu yang tidak mengganggu pengguna "normal", menonaktifkan klik kanan akan mencegah pengguna untuk menyalin dan menempelkan beberapa teks, atau mencari kata yang mereka minati, misalnya bukan judul video, tentu saja tidak semua pengguna mungkin akan melakukan itu tetapi ini dapat menjadi sesuatu yang mengejutkan bagi beberapa dari mereka
John Balvin Arias
14

Sebagai pengembang sisi klien, saya sarankan untuk menggunakan blob URL, URL blob adalah URL sisi klien yang merujuk ke objek biner

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

dalam HTML biarkan video Anda srckosong, dan dalam JS ambil file video menggunakan AJAX, pastikan jenis responsnya gumpalan

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();
}

Catatan: Metode ini tidak disarankan untuk file besar

EDIT

  • Gunakan pemblokiran lintas-asal untuk menghindari pengunduhan langsung

  • jika video dikirim oleh API Gunakan metode yang berbeda (PUT / POST) alih-alih 'GET'

Sajan
sumber
3
YouTube juga menggunakan Blob, saya pikir :)?
C0nw0nk
1
Bisakah Anda menjelaskan apa yang terjadi di sini dengan lebih jelas dan cara mengatur server untuk ini?
Anthony
1
@nerdofcode bagaimana sikapnya ketika pengguna mencoba meneruskan video? Apakah mereka harus menunggu sampai semua unduhan video?
John Balvin Arias
1
@JohnBalvinArias! Saya belum menguji 100% ini, tetapi saya akan mengatakan bahwa itu hanya membutuhkan buffer cepat ... Jangan mengutip saya tentang ini ...
NerdOfCode
1
Jika saya memeriksa halaman tersebut, di tab Network saya mendapatkan permintaan untuk video yang bisa saya buka di tab baru.
Simone
10

PHP mengirimkan tag video html5 bersama dengan sesi di mana kunci adalah string acak dan nilainya adalah nama file.

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>'; 

Sekarang PHP diminta untuk mengirim video. PHP memulihkan nama file; menghapus sesi dan mengirim video secara instan. Selain itu, semua 'no cache' dan header tipe mime harus ada.

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:

Sekarang jika pengguna menyalin url di tab baru atau menggunakan menu konteks ia tidak akan beruntung.

BF
sumber
Saya suka solusinya - itu memecahkan pertanyaan OPs. Satu hal yang disayangkan adalah, ketika memeriksa kode sumber di Chrome dan klik kanan pada tautan. Pengguna akan mengunduh file html, yang sebenarnya akan menjadi file video.
user1252280
5

Anda setidaknya dapat menghentikan orang-orang yang mengerti teknologi dari menggunakan menu konteks klik kanan untuk mengunduh video Anda. Anda dapat menonaktifkan menu konteks untuk elemen apa pun menggunakan atribut oncontextmenu.

oncontextmenu="return false;"

Ini berfungsi untuk elemen tubuh (seluruh halaman) atau hanya satu video yang menggunakannya di dalam tag video.

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

Kami akhirnya menggunakan AWS CloudFront dengan URL yang kedaluwarsa. Video akan dimuat, tetapi pada saat pengguna mengklik kanan dan memilih Save As url video yang awalnya mereka terima telah kedaluwarsa. Lakukan pencarian untuk CloudFront Origin Access Identity.

Memproduksi url video membutuhkan pasangan kunci yang dapat dibuat di AWS CLI. FYI ini bukan kode saya tetapi ini bekerja dengan baik!

$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>';
prophoto
sumber
1
Komentar yang sangat diremehkan. Saya menyarankan menggunakan docs.aws.amazon.com/sdk-for-php/v3/developer-guide/… saat ini.
Zmart
Jika token berakhir, apakah itu berarti mereka tidak dapat menavigasi video juga? Karena ini sepertinya menghubungi lagi URL video.
Chud37
4

Kita dapat membuatnya tidak mudah dengan menyembunyikan menu konteks, seperti ini:

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

+1 cara sederhana dan lintas-browser: Anda juga dapat menempatkan gambar transparan di atas video dengan css z-index dan opacity. Jadi pengguna akan melihat "simpan gambar sebagai" bukan "simpan video" di menu konteks.

Alex Babak
sumber
2
mengapa pic akan butuh waktu untuk memuat sehingga hanya menempatkan tag div dan mereka akan mendapatkan menu besar krom seperti memuat kembali dll
Waqas Tahir
Saya tidak yakin tetapi masih video dapat diunduh melalui File> SaveAs
Arun Kumar
3

Itu

<body oncontextmenu="return false;"> 

tidak lagi berfungsi. Chrome dan Opera pada Juni 2018 memiliki submenu pada timeline untuk memungkinkan pengunduhan langsung, sehingga pengguna tidak perlu mengeklik kanan untuk mengunduh video itu. Menariknya Firefox dan Edge tidak memiliki ini ...

kendolew
sumber
2

Menggunakan layanan seperti Vimeo: Masuk Vimeo > Goto Video > Settings > Privacy > Mark as Secured, dan juga pilih domain sematan. Setelah domain embed diatur, itu tidak akan mengizinkan siapa pun untuk menanamkan video atau menampilkannya dari browser kecuali menghubungkan dari domain yang ditentukan. Jadi, jika Anda memiliki halaman yang diamankan di server Anda yang memuat Vimeo player di iframe, ini membuatnya cukup sulit untuk berkeliling.

Pengguna Komentar
sumber
2

Pertama-tama sadari bahwa mustahil untuk sepenuhnya mencegah video diunduh, yang dapat Anda lakukan adalah membuatnya lebih sulit . Yaitu Anda menyembunyikan sumber video.

Peramban web untuk sementara mengunduh video dalam buffer, jadi jika dapat mencegah unduhan Anda juga akan mencegah video ditonton juga.

Anda juga harus tahu bahwa <1% dari total populasi dunia akan dapat memahami kode sumber yang membuatnya lebih aman. Itu tidak berarti Anda tidak harus menyembunyikannya di sumbernya juga - Anda harus .

Anda seharusnya tidak menonaktifkan klik kanan, dan terlebih lagi Anda harus menampilkan pesan yang mengatakan "You cannot save this video for copyright reasons. Sorry about that.". Seperti yang disarankan dalam jawaban ini .

Ini bisa sangat menjengkelkan dan membingungkan bagi pengguna. Selain itu; jika mereka menonaktifkan JavaScript di browser mereka, mereka akan melakukannya dapat klik kanan dan simpan pula.

Berikut adalah trik CSS yang dapat Anda gunakan:

video {
    pointer-events: none;
}

CSS tidak dapat dimatikan di browser, melindungi video Anda tanpa benar-benar menonaktifkan klik kanan. Namun satu masalah adalah bahwa controlstidak dapat diaktifkan juga, dengan kata lain mereka harus diatur ke false. Jika Anda akan menginstal fungsi Play / Pause Anda sendiri atau menggunakan API yang memiliki tombol terpisah untukvideo tag maka ini adalah opsi yang layak.

controls juga memiliki tombol unduh jadi menggunakannya juga bukan ide yang bagus.

Berikut ini adalah contoh JSFiddle .


Jika Anda akan menonaktifkan klik kanan menggunakan JavaScript, maka juga menyimpan sumber video dalam JavaScript juga. Dengan begitu jika pengguna menonaktifkan JavaScript (memungkinkan klik kanan) video tidak akan memuat (itu juga menyembunyikan sumber video sedikit lebih baik).

Dari jawaban TxRegex :

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

Sekarang tambahkan video melalui JavaScript:

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

JSFiddle fungsional


Cara lain untuk mencegah klik kanan melibatkan penggunaan embedtag. Namun ini tidak menyediakan kontrol untuk menjalankan video sehingga mereka perlu diinstruksikan dalam JavaScript:

<embed src="https://www.w3schools.com/html/mov_bbb.mp4"></embed>
Simon
sumber
1
Menambahkan URL src melalui JavaScript tidak banyak berguna. Memeriksa DOM akan menampilkan URL di depan mata setelah skrip mengaturnya.
Simone
@Simone Saya setuju, namun lebih baik daripada menunjukkannya langsung di sumber html, di mana siapa pun yang mengklik kanan dapat melihatnya dengan segera. Anda selalu dapat memisahkan url atau mengenkripsinya. Tapi ingat itu adalah proses tambahan
Simon
"CSS tidak dapat dimatikan di browser" - Secara teknis Anda dapat memodifikasi CSS di alat pengembang browser web untuk menonaktifkan aturan CSS tertentu, sehingga orang yang lebih mengerti teknologi bisa menghapuspointer-events: none;
Phil Gibbins
2

baik, Anda tidak bisa melindunginya 100% tetapi Anda bisa membuatnya lebih sulit. metode ini yang saya jelaskan, saya hadapi mereka selama mempelajari metode perlindungan di PluralSight dan BestDotNetTraining . Meskipun demikian, tidak satu pun dari metode ini yang menghentikan saya untuk mengunduh apa yang saya inginkan, tetapi saya mengalami kesulitan untuk mengkurasi pengunduh untuk melewati perlindungan mereka.

Selain metode lain yang disebutkan untuk menonaktifkan menu konteks. pengguna masih dapat menggunakan alat pihak ketiga seperti InternetDownload manager atau perangkat lunak serupa lainnya untuk mengunduh video. metode perlindungan yang saya jelaskan di sini adalah untuk mengurangi perangkat lunak pihak ke-3 itu.

persyaratan dari semua metode ini adalah untuk memblokir pengguna ketika Anda mengidentifikasi seseorang sedang mengunduh video Anda. dengan cara ini mereka hanya dapat mengunduh satu atau dua video saja sebelum Anda melarang mereka mengakses situs web Anda.

penolakan

Saya tidak akan menerima tanggung jawab apa pun jika seseorang menyalahgunakan metode ini atau menggunakannya untuk membahayakan orang lain atau situs web yang saya sebutkan sebagai contoh. itu hanya untuk berbagi pengetahuan untuk membantu Anda melindungi produk intelektual Anda.

menghasilkan tautan dengan kedaluwarsa

persyaratan untuk ini adalah membuat tautan unduhan per pengguna. yang satu dapat dengan mudah ditangani oleh penyimpanan gumpalan biru atau amazon s3. Anda dapat membuat tautan unduhan dengan cap waktu kedaluwarsa panjang video yang dua kali lipat. maka Anda perlu menangkap tautan video itu dan waktu yang diminta. ini diperlukan untuk metode selanjutnya. tangkapan untuk metode ini adalah Anda menghasilkan tautan unduhan ketika pengguna mengklik tombol putar.

pada acara tombol putar Anda akan mengirim permintaan ke server dan mendapatkan tautan serta memperbarui sumbernya.

tetapkan laju permintaan video

lalu Anda memantau seberapa cepat permintaan pengguna untuk video kedua. jika pengguna meminta tautan unduhan terlalu cepat, maka Anda segera memblokirnya. Anda tidak dapat menempatkan ambang ini terlalu besar karena Anda dapat secara keliru memblokir pengguna yang hanya menjelajah atau membaca sekilas video.

Aktifkan Rentang HTTP

menggunakan beberapa perpustakaan js seperti videojs untuk memutar video Anda, juga Anda perlu mengembalikan AcceptRange di header. Penyimpanan gumpalan Azure mendukung ini di luar kotak. dengan cara ini browser mulai mengunduh potongan video dengan potongan. biasanya, 32byte demi 32byte. maka Anda perlu mendengarkan videojstimeupdate perubahan dan memperbarui server Anda tentang persentase video yang ditonton. persentase bahwa video ditonton tidak boleh lebih dari persentase bahwa video dikirimkan. dan jika Anda mengirimkan konten video tanpa menerima perubahan persentase, maka Anda dapat memblokir pengguna. karena pasti mereka sedang mengunduh.

menerapkan ini rumit karena pengguna dapat melewati video ke depan atau ke belakang jadi sadarilah ini ketika Anda menerapkan ini.

ini adalah cara BestDotnetTraining menangani 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);
            }
        });
    }

});

bagaimanapun, pengguna dapat mengatasi ini dengan menggunakan beberapa metode unduhan yang mengunduh file melalui streaming. hampir c # melakukannya di luar kotak dan untuk nodejs, Anda dapat menggunakan requestmodul. maka Anda perlu memulai stopWatch, mendengarkan paket yang diterima dan membandingkan total byte yang diterima dibandingkan dengan ukuran total. dengan cara ini Anda dapat menghitung persentase dan waktu yang dihabiskan untuk mendapatkan jumlah persentase itu. lalu gunakanThread.Sleep() atau sesuatu seperti itu untuk menunda utas jumlah yang harus Anda tunggu jika Anda menonton video secara normal. juga sebelum tidur pengguna dapat menghubungi server dan memperbarui persentase yang diterima. jadi server berpikir bahwa pengguna sebenarnya menonton video.

perhitungannya akan seperti ini, misalnya, jika Anda menghitung bahwa Anda menerima 1 persen sejauh ini, maka Anda dapat menghitung jumlah yang harus Anda tunggu untuk tidur di utas unduhan. dengan cara ini Anda tidak dapat mengunduh video lebih cepat dari panjang sebenarnya. jika video 24 menit. akan dibutuhkan 24 menit untuk mengunduhnya. (ditambah ambang yang kita masukkan dalam metode pertama)

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

periksa agen peramban

ketika Anda melayani halaman web dan melayani tautan video atau menerima permintaan pembaruan kemajuan Anda dapat melihat agen peramban. jika berbeda maka larangan pengguna.

Perlu diketahui bahwa beberapa browser lama tidak meneruskan informasi ini. jadi Anda harus mengabaikan ini ketika tidak ada agen peramban dalam permintaan video dan permintaan halaman web. tetapi jika satu permintaan memilikinya dan yang lainnya tidak, maka Anda harus mencekal pengguna tersebut.

untuk mengatasi ini, pengguna dapat mengatur header agen browser secara manual sama dengan browser tanpa kepala yang mereka gunakan untuk menangkap tautan unduhan.

periksa tajuk pengarah

ketika referer adalah sesuatu selain URL host Anda atau URL halaman yang Anda tayangkan video, Anda dapat mencekal pengguna, karena mereka meletakkan tautan unduhan di tab lain atau aplikasi lain. bahkan Anda dapat melakukannya untuk permintaan pembaruan kemajuan.

persyaratan untuk ini adalah memiliki pemetaan video dan halaman yang menunjukkan video itu. Anda dapat membuat beberapa konvensi atau pola untuk memahami apa URL seharusnya, terserah desain Anda.

untuk mengatasinya pengguna dapat mengatur header pengarah secara manual sama dengan URL halaman unduhan saat mengunduh video.

Hitung waktu antara permintaan

jika Anda menerima begitu banyak permintaan sehingga waktu di antara keduanya sama, maka Anda harus memblokir pengguna. Anda harus meletakkan ini untuk menangkap berapa waktu antara permintaan pembuatan tautan video. jika mereka sama (plus / minus beberapa ambang) dan itu terjadi lebih dari beberapa kali, maka Anda dapat mencekal pengguna. karena jika ada bot yang akan merayapi situs web atau video Anda, maka biasanya mereka memiliki waktu tidur yang sama di antara permintaan mereka. jadi jika Anda menerima setiap permintaan, misalnya, setiap 1,3 (plus / menit penyimpangan) menit. maka Anda menaikkan alarm. untuk ini, Anda dapat menggunakan beberapa perhitungan statistik untuk mengetahui penyimpangan antara permintaan.

untuk mengatasinya, pengguna dapat menempatkan waktu tidur acak di antara permintaan.

Kode sampel

Saya punya repo PluralSight-Downloader yang melakukannya setengah jalan. Saya membuat repo ini hampir 5 tahun yang lalu. karena saya menulisnya untuk tujuan belajar dan penggunaan pribadi saja, repo tidak menerima pembaruan sejauh ini dan saya tidak akan memperbarui atau membuatnya mudah untuk dikerjakan. itu hanya contoh bagaimana hal itu dapat dilakukan.

Mo Hrad A
sumber
1

Jawaban Singkat: Enkripsi tautan seperti YouTube, tidak tahu bagaimana daripada meminta youtube / google tentang bagaimana mereka melakukannya. (Kalau-kalau Anda ingin langsung ke intinya.)

Saya ingin menunjukkan kepada siapa pun bahwa ini dimungkinkan karena youtube melakukannya dan jika mereka dapat melakukannya juga situs web lain dan bukan dari peramban juga karena saya mengujinya di beberapa peramban seperti microsoft edge dan internet explorer dan jadi ada cara untuk menonaktifkannya dan melihat bahwa orang-orang masih mengatakannya ... Saya mencoba mencari jawaban karena jika youtube dapat maka harus ada cara dan satu-satunya cara untuk melihat bagaimana mereka melakukannya adalah jika seseorang melihat ke dalam skrip youtube yang saya lakukan sekarang. Saya juga memeriksa untuk melihat apakah itu menu konteks kustom juga dan itu bukan karena menu konteks lebih mengalir elemen memeriksa dan maksud saya seperti itu di atasnya dan saya melihat dan tidak pernah membuat kelas baru dan juga itu tidak mungkin untuk benar-benar mengakses elemen inspeksi dengan javascript sehingga tidak bisa. Anda dapat mengetahui kapan klik dua kali video youtube yang muncul menu konteks untuk chrome. Selain itu ... youtube tidak akan menambahkan fungsi itu. Saya sedang melakukan penelitian dan mencari melalui sumber youtube jadi saya akan kembali jika saya menemukan jawabannya ... jika ada yang mengatakan Anda tidak bisa, ya mereka tidak tahu. t melakukan penelitian seperti yang saya miliki. Satu-satunya cara untuk mengunduh video youtube adalah melalui pengunduhan video.

Oke ... Saya melakukan penelitian dan penelitian saya tetap bahwa Anda dapat menonaktifkannya kecuali tidak ada javascript untuk itu ... Anda harus dapat mengenkripsi tautan ke video agar Anda dapat menonaktifkannya karena saya pikir ada browser tidak akan menampilkannya jika tidak dapat menemukannya dan ketika saya membuka tautan video youtube itu ditampilkan sebagai "gumpalan: https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"Tanpa tanda kutip sehingga mengenkripsi sehingga tidak dapat diselamatkan ... Anda perlu tahu php untuk itu tetapi seperti jawaban yang Anda pilih untuk membuatnya lebih sulit, youtube membuatnya menjadi yang paling sulit dari enkripsi berat itu, Anda harus menjadi memajukan php programmer tetapi jika Anda tidak tahu itu daripada mengambil orang yang Anda pilih sebagai jawaban terbaik membuatnya sulit untuk mengunduhnya ... tetapi jika Anda tahu php daripada berat mengenkripsi tautan video sehingga hanya dapat dibaca di Anda ... Saya tidak tahu bagaimana menjelaskan bagaimana mereka melakukannya tetapi mereka lakukan dan ada caranya. Cara youtube Mengenkripsi ada video cukup pintar jadi jika Anda ingin tahu bagaimana caranya daripada hanya bertanya youtube / google bagaimana mereka melakukannya ... semoga ini membantu Anda walaupun Anda sudah mengambil jawaban terbaik. Jadi, mengenkripsi tautan itu adalah yang terbaik dalam jangka pendek.

Jonathan J. Pecany
sumber
0

Sepertinya streaming video melalui websocket adalah pilihan yang layak, seperti dalam streaming bingkai dan menggambar mereka di atas kanvas semacam itu.

Streaming video melalui soket web menggunakan JavaScript

Saya pikir itu akan memberikan tingkat perlindungan lain yang membuatnya lebih sulit bagi klien untuk mendapatkan video dan tentu saja menyelesaikan masalah Anda dengan "Simpan video sebagai ..." pilihan menu konteks klik kanan (berlebihan?!).

Orang
sumber
0

Inilah yang saya lakukan:

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>
Ini juga berfungsi untuk gambar, teks, dan apa saja. Namun, Anda masih dapat mengakses alat "Periksa" dan "Lihat sumber" melalui pintasan keyboard. (Seperti kata jawaban di atas, Anda tidak bisa menghentikannya sama sekali.) Tetapi Anda dapat mencoba menempatkan penghalang untuk menghentikannya.

Calum Childs
sumber
-1

@ Clayton-Graul memiliki apa yang saya cari, kecuali saya membutuhkan versi CoffeeScript untuk situs yang menggunakan AngularJS. Jika Anda membutuhkannya juga, inilah yang Anda masukkan ke dalam pengontrol AngularJS yang dimaksud:

    # 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

"Hal-hal aneh sedang terjadi di lingkaran k" (itu benar)

Ryan Crews
sumber