Bagaimana saya dapat menonaktifkan "Save Video As..." dari browser's menu klik kanan untuk mencegah klien dari men-download sebuah video?
Ada solusi lebih lengkap yang mencegah klien mengakses file path langsung?
Anda dapat't. Yang's karena itu's apa browser yang dirancang untuk melakukan: Melayani konten. Tapi anda dapat membuat lebih sulit untuk di-download.
Hal pertama yang's pertama, anda bisa menonaktifkan contextmenu
acara, alias "klik kanan". Yang akan mencegah anda secara teratur skiddie dari terang-terangan ripping video anda dengan mengklik kanan dan Save As. Tapi kemudian mereka hanya bisa menonaktifkan JS dan mendapatkan sekitar ini atau menemukan sumber video melalui browser's debugger. Plus ini adalah buruk UX. Ada banyak yang sah hal-hal dalam menu konteks dari sekedar Simpan Sebagai.
Anda juga bisa menggunakan pemutar video khusus perpustakaan. Sebagian besar dari mereka melaksanakan pemutar video yang menyesuaikan konteks menu sesuai dengan keinginan anda. Sehingga anda don't mendapatkan browser default menu konteks. Dan jika pernah mereka lakukan item menu mirip dengan Save As, anda dapat menonaktifkannya. Tapi sekali lagi, ini adalah JS pemecahan masalah. Kelemahan yang mirip dengan pilihan sebelumnya.
Cara lain untuk melakukannya adalah untuk melayani video menggunakan HTTP Live Streaming. Apa yang pada dasarnya tidak memotong video menjadi potongan-potongan dan melayani satu setelah yang lain. Ini adalah bagaimana kebanyakan situs streaming sajikan video. Jadi bahkan jika anda mengatur untuk Menyimpan, anda hanya menyimpan sepotong, tidak seluruh video. Itu akan mengambil sedikit lebih banyak usaha untuk mengumpulkan semua potongan dan jahitan mereka menggunakan beberapa perangkat lunak khusus.
Teknik lain adalah untuk cat <video>
on <kanvas>
. Dalam teknik ini, dengan sedikit JavaScript, apa yang anda lihat di halaman ini <kanvas>
elemen rendering frame dari tersembunyi <video>
. Dan karena itu's <kanvas>
, menu konteks akan menggunakan <img>
's menu, bukan <video>
's. Anda'll dapatkan Simpan Gambar Sebagai alih-alih Menyimpan Video Sebagai.
Anda juga bisa menggunakan CSRF token untuk keuntungan anda. Anda'a telah memutuskan anda mengirim token pada halaman. Anda kemudian menggunakan token untuk mengambil video anda. Server anda akan memeriksa untuk melihat apakah itu's yang valid token sebelum menyajikan video, atau mendapatkan HTTP 401. Idenya adalah bahwa anda hanya bisa mendapatkan video dengan memiliki token yang anda dapat hanya pernah dapatkan jika anda datang dari halaman, tidak secara langsung mengunjungi url video.
Pada akhir hari, aku'd hanya meng-upload video saya ke pihak ketiga situs video, seperti YouTube atau Vimeo. Mereka memiliki video yang bagus alat manajemen, mengoptimalkan pemutaran untuk perangkat, dan mereka melakukan upaya-upaya dalam mencegah video mereka dari ripped dengan usaha nol pada akhir anda.
www.foo.com/player.html
www.foo.com/videos/video.mp4
www.foo.com/videos/.htaccess
RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://foo.com/.$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.foo.com/.$ [NC] RewriteRule .(mp4|mp3|avi)$ - [F]
Sekarang sumber link adalah tidak berguna, tapi kita masih perlu untuk memastikan setiap pengguna mencoba untuk men-download file yang tidak dapat langsung disajikan file.
www.foo.com/player.html benar akan memutar video, tapi jika anda mengunjungi www.foo.com/videos/video.mp4:
Kode Error 403: FORBIDDEN
Ini adalah sebuah jawaban untuk dua pertanyaan yang diajukan dan tidak jawaban untuk pertanyaan: "saya bisa menghentikan pengguna untuk men-download video yang sudah diunduh."
Cara terbaik yang biasanya saya gunakan sangat sederhana, saya sepenuhnya menonaktifkan menu konteks di seluruh halaman, murni html+javascript:
<body oncontextmenu="return false;">
Yang's itu! Aku melakukan itu karena anda selalu dapat melihat sumbernya dengan klik kanan. Ok, anda mengatakan: "saya dapat langsung menggunakan browser view source" dan's benar, tetapi kita mulai dari fakta bahwa anda DAPAT'T berhenti men-download `html5 video.
Sebagai client-side pengembang saya sarankan untuk menggunakan blob URL, gumpalan URL adalah client-side URL yang mengacu ke objek biner
<video id="id" width="320" height="240" type='video/mp4' controls > </video>
dalam HTML tinggalkan video src
kosong,
dan di JS mengambil file video menggunakan AJAX, pastikan respon jenis 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();
}
Catatan: metode Ini tidak dianjurkan untuk file besar
EDIT
Menggunakan cross-asal memblokir untuk menghindari direct download
jika video ini disampaikan oleh API Menggunakan metode yang berbeda (PUT/POS) bukan 'MENDAPATKAN'
PHP mengirimkan tag html5 video bersama-sama dengan sebuah sesi di mana kuncinya adalah string acak dan nilai 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 ini PHP sudah diminta untuk mengirimkan video. PHP pulih filename; menghapus sesi dan mengirimkan video langsung. Selain itu semua 'tidak ada cache' dan mime-type header harus hadir.
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 copy url di tab baru atau menggunakan menu konteks akan dia tidak memiliki keberuntungan.
Anda setidaknya dapat menghentikan non-tech savvy orang dari menggunakan klik kanan menu konteks untuk men-download video. Anda dapat menonaktifkan menu konteks untuk setiap elemen menggunakan oncontextmenu atribut.
oncontextmenu="return false;"
Ini bekerja untuk elemen body (seluruh halaman) atau hanya satu video menggunakan dalam video tag.
<video oncontextmenu="return false;" controls>...</video>
Kami akhirnya menggunakan AWS CloudFront berakhir dengan Url. Video akan beban, tapi pada saat user klik kanan dan memilih Save As url video pada awalnya mereka diterima telah berakhir. Lakukan pencarian untuk CloudFront Asal Akses Identitas.
Produksi video url membutuhkan pasangan kunci yang dapat dibuat dalam AWS CLI. FYI ini bukan kode saya tapi it works great!
$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>';
Yang
<body oncontextmenu="return false;">
tidak lagi bekerja. Chrome dan Opera pada bulan juni tahun 2018 memiliki submenu pada timeline untuk memungkinkan langsung download, sehingga pengguna tidak't perlu klik kanan untuk men-download video tersebut. Menariknya Firefox dan Tepi don't memiliki ini ...
Pertama-tama menyadari hal ini tidak mungkin untuk benar-benar mencegah sebuah video yang di-download, semua dapat anda lakukan adalah membuat lebih sulit. I. e. anda menyembunyikan sumber video.
Web browser untuk sementara download video di suatu buffer, sehingga jika bisa mencegah download anda juga akan mencegah video yang sedang dilihat juga.
Anda juga harus tahu bahwa <1% dari total populasi dunia akan dapat memahami kode sumber sehingga lebih aman pula. Itu tidak berarti anda tidak harus menyembunyikan hal itu di source - anda harus.
Anda harus tidak **** menonaktifkan klik kanan, dan bahkan kurang anda harus menampilkan pesan yang mengatakan "Anda tidak dapat menyimpan video ini untuk alasan hak cipta. Maaf tentang itu."
. Seperti yang disarankan dalam jawaban.
Hal ini dapat sangat mengganggu dan membingungkan bagi pengguna. Selain itu, jika mereka menonaktifkan JavaScript pada browser mereka mereka akan* dapat klik kanan dan simpan pula.
Berikut adalah CSS menipu anda bisa menggunakan:
video {
pointer-events: none;
}
CSS tidak dapat dimatikan di browser, melindungi video anda tanpa benar-benar menonaktifkan klik kanan. Namun salah satu masalah adalah bahwa kontrol
tidak dapat diaktifkan baik, dengan kata lain mereka harus diatur ke palsu
. Jika anda akan inplament anda sendiri Play/Pause fungsi atau menggunakan API yang memiliki tombol terpisah untuk video
tag maka ini adalah pilihan yang layak.
kontrol
juga memiliki tombol download, sehingga menggunakan hal ini tidak seperti ide yang baik baik.
Berikut ini adalah [JSFiddle][2] contoh.
Jika anda akan untuk menonaktifkan klik kanan menggunakan JavaScript kemudian juga menyimpan sumber video di JavaScript juga. Dengan cara itu jika pengguna menonaktifkan JavaScript (yang memungkinkan klik kanan) video tidak akan memuat (hal ini juga menyembunyikan sumber video sedikit lebih baik).
Dari TxRegex jawaban:
<video oncontextmenu="return false;" controls>
<source type="video/mp4" id="video">
</video>
Sekarang tambahkan video via JavaScript:
document.getElementById("video").src = "https://www.w3schools.com/html/mov_bbb.mp4";
Fungsional [JSFiddle][4]
Cara lain untuk mencegah klik kanan melibatkan menggunakan embed
tag. Hal ini tidak memberikan kontrol untuk menjalankan video sehingga mereka akan perlu untuk menjadi inplamented dalam JavaScript:
<embed src="https://www.w3schools.com/html/mov_bbb.mp4"></embed>
Menggunakan layanan seperti Vimeo: Masuk Vimeo > Goto Video > Pengaturan > Privasi > Tandai sebagai telah Diamankan
, dan juga pilih cantumkan domain. Setelah cantumkan domain yang ditetapkan, tidak akan mengizinkan siapa pun untuk embed video atau tampilan dari browser kecuali menghubungkan dari domain tertentu. Jadi, jika anda memiliki halaman yang lebih aman pada server anda yang memuat Vimeo player di iframe, hal ini membuatnya cukup sulit untuk mendapatkan sekitar.
Jawaban singkat: Mengenkripsi link seperti youtube tidak, don't tahu bagaimana daripada meminta youtube/google bagaimana mereka melakukannya. (Hanya dalam kasus anda ingin mendapatkan lurus ke titik.)
Saya ingin menunjukkan kepada siapa saja bahwa ini adalah mungkin karena youtube tidak dan jika mereka dapat sehingga dapat website lain dan isn't dari browser baik karena saya diuji pada beberapa browser seperti microsoft internet explorer dan ujung dan sehingga ada cara untuk menonaktifkannya dan melihat bahwa orang-orang masih mengatakan itu...aku mencoba mencari jawaban karena jika youtube bisa dari ada satu cara dan satu-satunya cara untuk melihat bagaimana mereka melakukan hal ini jika seseorang melihat ke script dari youtube yang saya lakukan sekarang. Saya juga diperiksa untuk melihat jika itu adalah custom menu konteks juga dan bukan't karena konteks menu atas mengalir inspect element dan maksud saya seperti itu adalah lebih dari itu dan aku memandang dan itu tidak pernah menciptakan kelas baru dan juga itu adalah mustahil untuk benar-benar mengakses inspect element dengan javascript sehingga dapat't akan. Anda dapat memberitahu ketika itu double klik kanan video youtube itu muncul menu konteks untuk chrome. Selain itu...youtube tidak't menambahkan bahwa fungsi di. Saya melakukan penelitian dan mencari melalui sumber youtube jadi aku akan kembali jika aku menemukan jawabannya...jika ada yang mengatakan anda dapat't dari, baik mereka didn't melakukan penelitian seperti yang saya miliki. Satu-satunya cara untuk download video youtube melalui video yang di-download.
Oke...saya melakukan riset dan penelitian saya tetap bahwa anda dapat menonaktifkan itu kecuali tidak ada javascript untuk itu...anda harus mampu untuk mengenkripsi link ke video anda dapat menonaktifkannya karena saya pikir setiap browser yang tidak't menunjukkan jika bisa't menemukan dan ketika saya membuka link video youtube itu menunjukkan seperti ini "blob:
tanpa tanda kutip jadi itu adalah enkripsi sehingga tidak bisa diselamatkan...anda perlu tahu php itu tapi seperti jawaban anda memilih dari membuat ini lebih sulit, youtube membuat yang paling sulit dari berat enkripsi, anda perlu untuk memajukan php programmer tetapi jika anda don't tahu bahwa dari mengambil orang yang anda pilih sebagai jawaban terbaik dari sehingga sulit untuk men-download...tapi jika anda tahu php dari berat mengenkripsi link video sehingga hanya dapat membaca pada anda...saya don't tahu bagaimana untuk menjelaskan bagaimana mereka melakukannya, tetapi mereka lakukan dan ada jalan. Cara youtube Mengenkripsi ada video yang cukup pintar, jadi jika anda ingin tahu bagaimana daripada hanya meminta youtube/google bagaimana mereka melakukannya...semoga ini bisa membantu untuk anda meskipun anda sudah memilih jawaban terbaik. Jadi enkripsi link terbaik di jangka pendek.Sepertinya streaming video melalui websocket adalah pilihan yang layak, seperti di aliran frame dan menggambar mereka di atas kanvas semacam itu.
https://stackoverflow.com/questions/4241992/video-streaming-over-websockets-using-javascript
Saya berpikir bahwa akan memberikan tingkat perlindungan lain yang membuatnya lebih sulit bagi klien untuk memperoleh video dan tentu saja memecahkan masalah anda dengan "Save video as..." klik kanan menu konteks pilihan ( berlebihan ?! ).
Berikut ini's apa 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>
Hal ini juga bekerja untuk gambar, teks, dan apa pun cukup banyak. Namun, anda masih dapat mengakses "Memeriksa" dan "Lihat sumber" alat melalui cara pintas keyboard. (Seperti jawaban di atas mengatakan, anda bisa't stop itu sepenuhnya.) Tetapi anda dapat mencoba untuk menempatkan hambatan untuk menghentikan mereka.
@Clayton-Graul memiliki apa yang saya cari, kecuali aku butuh CoffeeScript versi untuk situs yang menggunakan AngularJS. Hanya dalam kasus anda perlu itu juga, di sini's apa yang anda masukkan ke dalam AngularJS controller dalam pertanyaan:
# 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 yang terjadi di circle k" (it's true)