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?
javascript
html
menu
html5-video
right-click
ular sanca
sumber
sumber
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?Jawaban:
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
contextmenu
acara 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.
sumber
src
pada<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.Ini adalah solusi sederhana bagi mereka yang hanya ingin menghapus klik kanan "save" dari video html5
sumber
src
atributnya, dan buka di tab lain atau gunakanwget
untuk mengunduhnya!Jawaban sederhana,
ANDA TIDAK BISA
Jika mereka menonton video Anda, mereka sudah memilikinya
sumber
Ya, Anda bisa melakukan ini dalam tiga langkah:
Simpan file di subdirektori yang bernama ".htaccess" dan tambahkan baris di bawah ini.
Sekarang tautan sumber tidak berguna , tetapi kami masih perlu memastikan bahwa setiap pengguna yang mencoba mengunduh file tidak dapat langsung melayani file tersebut.
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:
Hasil:
www.foo.com/player.html akan memutar video dengan benar , tetapi jika Anda mengunjungi www.foo.com/videos/video.mp4:
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."
sumber
.htaccess
konten AndaCara terbaik yang biasanya saya gunakan adalah sangat sederhana, saya sepenuhnya menonaktifkan menu konteks di seluruh halaman, html + javascript murni:
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
html5
video.sumber
Sebagai pengembang sisi klien, saya sarankan untuk menggunakan blob URL, URL blob adalah URL sisi klien yang merujuk ke objek biner
dalam HTML biarkan video Anda
src
kosong, dan dalam JS ambil file video menggunakan AJAX, pastikan jenis responsnya gumpalanCatatan: 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'
sumber
PHP mengirimkan tag video html5 bersama dengan sesi di mana kunci adalah string acak dan nilainya adalah nama file.
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.
Sekarang jika pengguna menyalin url di tab baru atau menggunakan menu konteks ia tidak akan beruntung.
sumber
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.
Ini berfungsi untuk elemen tubuh (seluruh halaman) atau hanya satu video yang menggunakannya di dalam tag video.
sumber
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!
sumber
Kita dapat membuatnya tidak mudah dengan menyembunyikan menu konteks, seperti ini:
sumber
+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.
sumber
Itu
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 ...
sumber
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.sumber
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:
CSS tidak dapat dimatikan di browser, melindungi video Anda tanpa benar-benar menonaktifkan klik kanan. Namun satu masalah adalah bahwa
controls
tidak dapat diaktifkan juga, dengan kata lain mereka harus diatur kefalse
. 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 :
Sekarang tambahkan video melalui JavaScript:
JSFiddle fungsional
Cara lain untuk mencegah klik kanan melibatkan penggunaan
embed
tag. Namun ini tidak menyediakan kontrol untuk menjalankan video sehingga mereka perlu diinstruksikan dalam JavaScript:sumber
pointer-events: none;
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 videojs
timeupdate
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
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
request
modul. 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)
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.
sumber
Kamu bisa memakai
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/controlsList
Itu tidak mencegah menyimpan video, tetapi itu menghapus tombol unduh dan opsi "Simpan sebagai" di menu konteks.
sumber
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.
sumber
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?!).
sumber
Inilah yang saya lakukan:
sumber
@ 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:
"Hal-hal aneh sedang terjadi di lingkaran k" (itu benar)
sumber