Verhindern, dass HTML5-Videos heruntergeladen werden (Rechtsklick gespeichert)?


171

Wie kann ich "Video speichern unter ..." im Kontextmenü eines Browsers deaktivieren, um zu verhindern, dass Clients ein Video herunterladen?

Gibt es umfassendere Lösungen, die verhindern, dass der Client direkt auf einen Dateipfad zugreift?


3
Ich habe diese Frage positiv bewertet, da nur gefragt wird, wie der Rechtsklick für ein HTML5-Video deaktiviert werden soll. Ich bin mir nicht sicher, ob es dem Deaktivieren mit der rechten Maustaste für normale Bilder ähnelt oder ob andere Overlay-Tricks usw. angewendet werden können.

3
Selbst wenn Sie den Rechtsklick deaktivieren, können sie ihn über das Browser-Menü ( File→Save As) speichern . Selbst wenn Sie das irgendwie blockieren könnten, können sie die Quellansicht anzeigen , um die URL der Datei zu finden. Selbst wenn Sie das ein wenig verschleiern könnten, können sie es aus dem Cache rippen. Selbst wenn Sie dies erschweren könnten (z. B. Stream), können sie den Netzwerkverkehr mit einem Sniffer oder etwas anderem erfassen. Tatsache ist, wenn Sie es an einen Benutzer senden, kann dieser es speichern. Daran führt kein Weg vorbei. Die Frage, die Sie stellen müssen, ist, warum Sie es so sehr stoppen müssen. Ist es wirklich überhaupt so notwendig? Lohnt sich die Mühe und Benutzerunfreundlichkeit?
Synetech

Ich mag TxRegex Antwort am besten als schnelle Basislösung.
Jsherk

Ich werde hier pedantisch aussehen, aber Sie überladen den Begriff "Download". Sie möchten natürlich , dass das Video heruntergeladen wird.
Johan Boulé

Antworten:


226

Das kannst du nicht . Das liegt daran, dass Browser genau dafür entwickelt wurden: Inhalte bereitstellen . Aber man kann es schwieriger machen herunterladen .

Das erste , was ist zuerst, Sie könnten das deaktivieren contextmenuEreignis , auch bekannt als „die rechte Maustaste“. Dies würde verhindern, dass Ihr normaler Skiddie Ihr Video durch Klicken mit der rechten Maustaste und Speichern unter krass rippt. Aber dann könnten sie einfach JS deaktivieren und dies umgehen oder die Videoquelle über den Debugger des Browsers finden. Plus das ist schlechtes UX. In einem Kontextmenü gibt es viele legitime Dinge als nur Speichern unter.

Sie können auch benutzerdefinierte Videoplayer-Bibliotheken verwenden. Die meisten von ihnen implementieren Videoplayer, die das Kontextmenü nach Ihren Wünschen anpassen. Sie erhalten also nicht das Standard-Browser-Kontextmenü. Und wenn sie jemals einen Menüpunkt ähnlich wie Speichern unter bedienen, können Sie ihn deaktivieren. Aber auch dies ist eine JS-Problemumgehung. Schwächen ähneln der vorherigen Option.

Eine andere Möglichkeit besteht darin, das Video über HTTP Live Streaming bereitzustellen . Im Wesentlichen wird das Video in Stücke geschnitten und nacheinander bereitgestellt. So liefern die meisten Streaming-Sites Videos. Selbst wenn Sie es schaffen, unter zu speichern, speichern Sie nur einen Teil, nicht das gesamte Video. Es würde etwas mehr Mühe kosten, alle Stücke zu sammeln und sie mit einer speziellen Software zu nähen.

Eine andere Technik ist zu malen <video>auf<canvas> . Bei dieser Technik mit etwas JavaScript sehen Sie auf der Seite ein <canvas>Element, das Frames aus einem versteckten Bild rendert <video>. Und weil es ein ist <canvas>, verwendet das Kontextmenü ein <img>Menü, kein <video>. Sie erhalten ein Bild speichern unter anstelle eines Videos speichern unter.

Sie können auch CSRF-Token zu Ihrem Vorteil verwenden. Ihr Server würde einen Token auf der Seite senden. Mit diesem Token rufen Sie dann Ihr Video ab. Ihr Server prüft, ob es sich um ein gültiges Token handelt, bevor es das Video bereitstellt, oder holt sich ein HTTP 401 . Die Idee ist, dass Sie ein Video immer nur erhalten können, wenn Sie über ein Token verfügen, das Sie nur erhalten können, wenn Sie von der Seite gekommen sind und nicht direkt die Video-URL besucht haben.

Am Ende des Tages würde ich mein Video einfach auf eine Video-Site eines Drittanbieters wie YouTube oder Vimeo hochladen. Sie verfügen über gute Videomanagement-Tools, optimieren die Wiedergabe auf dem Gerät und bemühen sich, zu verhindern, dass ihre Videos ohne großen Aufwand von Ihnen kopiert werden.


1
Vielen Dank für die ausführliche Antwort. Ist es möglich, die Option Speichern unter im Kontextmenü zumindest zu deaktivieren? Es wird die meisten Fälle von Grundkenntnissen abdecken
Python

2
das hängt vom browser ab. Ich habe mal gesehen (insbesondere Firefox und Chrome), dass wenn das Video vollständig geladen ist, wenn Sie auf "Speichern" klicken, sie das Video einfach aus dem Cache auswählen, anstatt es erneut herunterzuladen (das Video ist bereits im Cache heruntergeladen, warum es herunterladen wieder?), also gibt es keine zweite Anfrage. Die obige Methode ist nur anwendbar, wenn der Link wiederverwendet wird.
Joseph

1
Nun, ich fand einen Artikel über das Überlagern des Video-Tags mit einem Div. aktualisierte meine Antwort
Joseph

2
Vielen Dank. Ich habe gerade craftymind.com/factory/html5video/CanvasVideo.html gelesen . Die Idee ist fast die gleiche wie Ihre Antwort.
Trung

1
@Cupidvogel Die "URL zur einmaligen Verwendung" ist ein Serverendpunkt, der ein vom Server generiertes Token akzeptiert. Das Token wird bei der Seitengenerierung generiert und in der Datenbank gespeichert. Es ist auch mit der Seite , wie versendet srcvon der <video>. Wenn Ihre Seite geladen wurde, hat die Datenbank das Token, die Seite das Token. Sobald <video>der Ladevorgang beginnt (Zugriff auf den Endpunkt), überprüft der Server, ob sich das Token in der Datenbank befindet, löscht es und überträgt die Datei. Wenn das Token aufgrund des zweiten Zugriffs nicht vorhanden ist, streamen Sie die Datei nicht.
Joseph

118

Dies ist eine einfache Lösung für diejenigen, die einfach die Rechtsklick-Option "Speichern" aus den HTML5-Videos entfernen möchten

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

Das ist fantastisch ! Es macht einen großartigen Job, normale Leute daran zu hindern, das Video herunterzuladen!
Etienne Noël

2
Dies hilft jedoch nicht, wenn JavaScript im Browser deaktiviert ist.
Mvark

2
Vielen Dank, diese Lösung reicht für 90% aller unserer Besucher aus.
Kai Noack

2
Bleh. Überprüfen Sie einfach das Element in Firebug, sehen Sie sich das srcAttribut an und öffnen Sie es in einem anderen Tab oder wgetladen Sie es herunter!
SexyBeast

11
Ich denke, das Hauptziel ist es, zu vermeiden, dass "normale" Benutzer das Video herunterladen. Dies ist eine gute Lösung, um diese Situation zu lösen.
Unapedra

37

Einfache Antwort,

SIE KÖNNEN NICHT

Wenn sie Ihr Video ansehen, haben sie es bereits

Sie können sie verlangsamen, aber nicht aufhalten.


Diese Antwort gilt übrigens für HTML5-Videos, Flash-Videos oder jede Technologie, die Sie sich in Zukunft vorstellen können. Es ist einfach: So funktioniert es.
Gustavo Rodrigues

Und was ist mit YouTube? Auf YouTube können Sie die Videodatei nicht einfach entdecken. Ich meine, ok, Sie haben Recht, wir können, aber es ist einfach, die MP4-Quelle auf Youtube oder einem ähnlichen Video-Hosting zu verbergen, als eine einfache MP4-Datei auf unserem Server zu hosten und den HTML5-Player zu verwenden.
Dlopezgonzalez

2
Das ist keine Antwort auf eine der Fragen.
Tzshand

1
Die Leute könnten ihren gesamten Bildschirm und Audio aufnehmen und alle Problemumgehungen täuschen, deshalb können sie nur verlangsamt werden.
Kintsukuroi

1
@IlanSchemoul Interessant. Danke fürs Teilen :)
Starx

33

Ja, Sie können dies in drei Schritten tun:


  1. Platzieren Sie die zu schützenden Dateien in einem Unterverzeichnis des Verzeichnisses, in dem Ihr Code ausgeführt wird.

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

  2. Speichern Sie eine Datei in diesem Unterverzeichnis mit dem Namen ".htaccess" und fügen Sie die folgenden Zeilen hinzu.

    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]

Jetzt ist der Quelllink nutzlos , aber wir müssen trotzdem sicherstellen, dass jedem Benutzer, der versucht, die Datei herunterzuladen, die Datei nicht direkt zugestellt werden kann.

  1. Für eine vollständigere Lösung stellen Sie das Video jetzt mit einem Flash-Player (oder einer HTML-Zeichenfläche) bereit und verknüpfen Sie es niemals direkt mit dem Video. Fügen Sie Ihrem HTML-Code Folgendes hinzu, um das Kontextmenü zu entfernen:

    <body oncontextmenu="return false;">


Das Ergebnis:

www.foo.com/player.html spielt Videos korrekt ab , aber wenn Sie www.foo.com/videos/video.mp4 besuchen:

Fehlercode 403: VERBOTEN


Dies funktioniert für direkten Download, cURL, Hotlinking, wie Sie es nennen.

Dies ist eine vollständige Antwort auf die beiden gestellten Fragen und keine Antwort auf die Frage: "Kann ich einen Benutzer daran hindern, ein bereits heruntergeladenes Video herunterzuladen?"


1
Tolle Antwort, aber Sie haben ein "dass Sie es aus Ihrem .htaccessInhalt entfernen sollten
MAZux

2
Sie können den HTTP-Referer weiterhin fälschen, sodass eine Person ihn herunterladen kann. Dies ist jedoch eine sehr clevere Lösung. Wenn Sie dies mit einem einmaligen Code in der Datei verbinden, können Sie loslegen!
Shiroy

Es scheint immer noch, dass IDM es herunterladen kann!
PersianMan

@ PersianMan Richtig - Ich ermutige Sie, die ersten Antworten zu lesen
Tzshand

1
Wenn Sie das Javascript im Browser deaktivieren, funktioniert dieser Trick nicht, da dann der Rechtsklick aktiviert wird. Um dies ebenfalls zu vermeiden, sollten Sie das Videoelement mithilfe von jquery dynamisch abrufen und laden.
Anindya Sankar Dasgupta

23

Der beste Weg, den ich normalerweise benutze, ist sehr einfach. Ich deaktiviere das Kontextmenü auf der gesamten Seite vollständig, reines HTML + Javascript:

 <body oncontextmenu="return false;">

Das ist es! Ich mache das, weil Sie die Quelle immer mit einem Rechtsklick sehen können.
Ok, Sie sagen: "Ich kann die Quelle der Browseransicht direkt verwenden" und es stimmt, aber wir gehen davon aus, dass Sie das Herunterladen von Videos NICHT beenden können html5.


Ich denke, die Lösung muss eine sein, die "normale" Benutzer nicht stört. Durch Deaktivieren des Rechtsklicks wird verhindert, dass Benutzer Text kopieren und einfügen oder nach einem Wort suchen, in dem sie sich befinden, z. B. nach dem Titel des Videos, natürlich nicht Alle Benutzer werden das wahrscheinlich tun, aber es kann für einige von ihnen ärgerlich sein
John Balvin Arias

14

Als clientseitiger Entwickler empfehle ich die Verwendung der Blob-URL. Die Blob-URL ist eine clientseitige URL, die auf ein binäres Objekt verweist

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

Lassen Sie in HTML Ihr Video srcleer und stellen Sie in JS beim Abrufen der Videodatei mit AJAX sicher, dass der Antworttyp blob ist

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

Hinweis: Diese Methode wird für große Dateien nicht empfohlen

BEARBEITEN

  • Verwenden Sie die Ursprungsblockierung, um direktes Herunterladen zu vermeiden

  • Wenn das Video von einer API geliefert wird Verwenden Sie eine andere Methode (PUT / POST) anstelle von 'GET'.


3
YouTube benutzt jetzt auch Blob, denke ich :)?
C0nw0nk

1
Können Sie klarer erklären, was hier vor sich geht und wie Sie den Server dafür einrichten?
Anthony

1
@nerdofcode Wie verhält sich das, wenn Benutzer versuchen, das Video weiterzuleiten? Müssen sie warten, bis alle Videos heruntergeladen sind?
John Balvin Arias

1
@ JohnBalvinArias! Ich habe dies nicht zu 100% getestet, aber ich werde sagen, dass es nur einen schnellen Puffer braucht ...
Zitiere

1
Wenn ich die Seite inspiziere, erhalte ich auf der Registerkarte "Netzwerk" eine Anfrage für das Video, das ich einfach in einer neuen Registerkarte öffnen kann.
Simone

10

PHP sendet das HTML5-Video-Tag zusammen mit einer Sitzung, in der der Schlüssel eine zufällige Zeichenfolge und der Wert der Dateiname ist.

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

Jetzt wird PHP gebeten, das Video zu senden. PHP stellt den Dateinamen wieder her. löscht die Sitzung und sendet das Video sofort. Außerdem müssen alle Header vom Typ "Kein Cache" und vom Typ "MIME" vorhanden sein.

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:

Wenn der Benutzer nun die URL in einen neuen Tab kopiert oder das Kontextmenü verwendet, hat er kein Glück.


Ich mag die Lösung - sie löst die Frage der OP. Eine unglückliche Sache ist, wenn der Quellcode in Chrome überprüft und mit der rechten Maustaste auf den Link geklickt wird. Der Benutzer lädt eine HTML-Datei herunter, bei der es sich tatsächlich um die Videodatei handelt.
user1252280

5

Sie können zumindest verhindern, dass technisch nicht versierte Personen das Kontextmenü mit der rechten Maustaste verwenden, um Ihr Video herunterzuladen. Sie können das Kontextmenü für jedes Element mithilfe des Attributs oncontextmenu deaktivieren.

oncontextmenu="return false;"

Dies funktioniert für das Body-Element (ganze Seite) oder nur für ein einzelnes Video, das es innerhalb des Video-Tags verwendet.

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

5

Am Ende haben wir AWS CloudFront mit abgelaufenen URLs verwendet. Das Video wird geladen, aber wenn der Benutzer mit der rechten Maustaste klickt und "Speichern unter" auswählt, ist die ursprünglich empfangene Video-URL abgelaufen. Suchen Sie nach CloudFront Origin Access Identity.

Für die Erstellung der Video-URL ist ein Schlüsselpaar erforderlich, das in der AWS-CLI erstellt werden kann. Zu Ihrer Information, das ist nicht mein Code, aber es funktioniert großartig!

$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
Stark unterschätzter Kommentar. Ich würde heutzutage jedoch empfehlen, docs.aws.amazon.com/sdk-for-php/v3/developer-guide/… zu verwenden .
Zmart

Wenn das Token abläuft, können sie dann auch nicht im Video navigieren? Da dies die Video-URL erneut zu kontaktieren scheint.
Chud37

4

Wir könnten das nicht so einfach machen, indem wir das Kontextmenü wie folgt ausblenden:

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

3

+1 einfache und browserübergreifende Methode: Sie können dem Video auch ein transparentes Bild mit CSS-Z-Index und Deckkraft hinzufügen. Daher sehen Benutzer im Kontextmenü "Bild speichern unter" anstelle von "Video speichern".


2
Warum Bild es wird einige Zeit dauern, um zu laden, so setzen Sie nur das div-Tag und sie erhalten ein großes Menü von Chrom wie Back-Reload usw.
Waqas Tahir

Ich bin nicht sicher, aber noch Video kann über Datei> SaveAs
Arun Kumar

3

Das

<body oncontextmenu="return false;"> 

funktioniert nicht mehr. Chrome und Opera haben ab Juni 2018 ein Untermenü auf der Timeline, um einen direkten Download zu ermöglichen, sodass Benutzer nicht mit der rechten Maustaste klicken müssen, um das Video herunterzuladen. Interessanterweise haben Firefox und Edge das nicht ...


2

Verwenden eines Dienstes wie Vimeo: Melden Sie sich an Vimeo > Goto Video > Settings > Privacy > Mark as Securedund wählen Sie auch eingebettete Domänen aus. Sobald die eingebetteten Domänen festgelegt sind, kann niemand das Video einbetten oder über den Browser anzeigen, es sei denn, es wird eine Verbindung über die angegebenen Domänen hergestellt. Wenn Sie also eine Seite haben, die auf Ihrem Server gesichert ist und den Vimeo-Player in iframe lädt, ist es ziemlich schwierig, sich fortzubewegen.


2

Stellen Sie zunächst fest, dass es unmöglich ist, das Herunterladen eines Videos vollständig zu verhindern. Sie können es lediglich erschweren . Dh du versteckst die Quelle des Videos.

Ein Webbrowser lädt das Video vorübergehend in einem Puffer herunter. Wenn Sie also den Download verhindern könnten, würden Sie auch verhindern, dass das Video ebenfalls angezeigt wird.

Sie sollten auch wissen, dass <1% der Gesamtbevölkerung der Welt den Quellcode verstehen können, was ihn ohnehin ziemlich sicher macht. Das bedeutet nicht, dass Sie es nicht auch in der Quelle verstecken sollten - Sie sollten es tun .

Sie sollten den Rechtsklick nicht deaktivieren und noch weniger eine Meldung mit der Aufschrift anzeigen "You cannot save this video for copyright reasons. Sorry about that.". Wie in dieser Antwort vorgeschlagen .

Dies kann für den Benutzer sehr ärgerlich und verwirrend sein. Abgesehen davon; wenn sie JavaScript in ihrem Browser deaktivieren sie wird auf der rechten Maustaste können , und trotzdem sparen.

Hier ist ein CSS-Trick, den Sie verwenden können:

video {
    pointer-events: none;
}

CSS kann im Browser nicht deaktiviert werden, um Ihr Video zu schützen, ohne den Rechtsklick zu deaktivieren. Ein Problem ist jedoch, dass es controlsauch nicht aktiviert werden kann, mit anderen Worten, sie müssen eingestellt sein false. Wenn Sie Ihre eigene Wiedergabe- / Pausenfunktion einbauen oder eine API verwenden möchten, deren Schaltflächen vom videoTag getrennt sind, ist dies eine praktikable Option.

controls hat auch einen Download-Button, so dass die Verwendung auch keine so gute Idee ist.

Hier ist ein JSFiddle- Beispiel.


Wenn Sie den Rechtsklick mit JavaScript deaktivieren möchten, speichern Sie auch die Quelle des Videos in JavaScript. Auf diese Weise wird das Video nicht geladen, wenn der Benutzer JavaScript deaktiviert (Rechtsklick zulässt) (es verbirgt auch die Videoquelle etwas besser).

Von TxRegex Antwort :

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

Fügen Sie nun das Video über JavaScript hinzu:

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

Funktionale JSFiddle


Eine andere Möglichkeit, Rechtsklicks zu verhindern, besteht in der Verwendung des embedTags. Dies bietet jedoch nicht die Steuerelemente zum Ausführen des Videos, sodass sie in JavaScript implementiert werden müssten:

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

1
Das Hinzufügen der src-URL über JavaScript ist nicht sehr nützlich. Wenn Sie das DOM überprüfen, wird die URL sichtbar, nachdem das Skript sie festgelegt hat.
Simone

@ Simone Ich stimme zu, aber es ist besser, als es direkt in der HTML-Quelle anzuzeigen, wo jeder, der mit der rechten Maustaste darauf klickt, es sofort sehen kann. Sie können die URL jederzeit aufteilen oder verschlüsseln. Aber denken Sie daran, das ist zusätzliche Verarbeitung
Simon

"CSS kann im Browser nicht deaktiviert werden" - Technisch können Sie das CSS in Webbrowser-Entwicklertools ändern, um bestimmte CSS-Regeln zu deaktivieren, damit eine technisch versierte Person es entfernen kannpointer-events: none;
Phil Gibbins

2

Nun, Sie können es nicht 100% schützen, aber Sie können es schwieriger machen. Diese Methoden, die ich erkläre, habe ich ihnen beim Studium der Schutzmethoden in begegnet PluralSight und BestDotNetTraining kennengelernt . Trotzdem hinderte mich keine dieser Methoden daran, das herunterzuladen, was ich wollte, aber es fiel mir schwer, den Downloader zu kuratieren, um seinen Schutz zu bestehen.

Zusätzlich zu anderen genannten Methoden zum Deaktivieren des Kontextmenüs. Der Benutzer kann weiterhin Tools von Drittanbietern wie InternetDownload Manager oder andere ähnliche Software zum Herunterladen der Videos verwenden. Die hier erläuterte Schutzmethode besteht darin, die Software von Drittanbietern zu verringern.

Die Anforderung all dieser Methoden besteht darin, einen Benutzer zu blockieren, wenn Sie feststellen, dass jemand Ihre Videos herunterlädt. Auf diese Weise können sie nur ein oder zwei Videos herunterladen, bevor Sie ihnen den Zugriff auf Ihre Website untersagt haben.

Haftungsausschluss

Ich übernehme keine Verantwortung, wenn jemand diese Methoden missbraucht oder sie verwendet, um anderen oder den von mir als Beispiel genannten Websites Schaden zuzufügen. Es dient nur dem Wissensaustausch, um Ihr intellektuelles Produkt zu schützen.

Links mit Ablauf generieren

Voraussetzung dafür ist, dass pro Benutzer ein Download-Link erstellt wird. dass man leicht von Azure Blob Storage oder Amazon S3 handhaben kann. Sie können einen Download-Link mit dem doppelten Zeitstempel für das Ablaufen der Videolänge erstellen. Dann müssen Sie diesen Videolink und die angeforderte Zeit erfassen. Dies ist für die nächste Methode erforderlich. Der Haken bei dieser Methode ist, dass Sie den Download-Link generieren, wenn der Benutzer auf die Wiedergabetaste klickt.

Bei einem Play-Button-Ereignis senden Sie eine Anfrage an den Server, erhalten den Link und aktualisieren die Quelle.

Drosseln Sie die Videoanforderungsrate

Anschließend überwachen Sie, wie schnell der Benutzer das zweite Video anfordert. Wenn der Benutzer einen Download-Link zu schnell anfordert, blockieren Sie ihn sofort. Sie können diesen Schwellenwert nicht zu hoch einstellen, da Sie fälschlicherweise Benutzer blockieren können, die nur die Videos durchsuchen oder durchblättern.

Aktivieren Sie den HTTP-Bereich

Verwenden Sie eine js-Bibliothek wie videojs , um Ihr Video abzuspielen. Außerdem müssen Sie einen AcceptRange in Ihrem Header zurückgeben. Der Azure-Blob-Speicher unterstützt dies sofort. Auf diese Weise beginnt der Browser, das Video Stück für Stück herunterzuladen. normalerweise 32 Byte mal 32 Byte. Dann müssen Sie sich die timeupdateÄnderung der Videos anhören und Ihren Server über den Prozentsatz aktualisieren, in dem das Video angesehen wird. Der Prozentsatz, in dem das Video angesehen wird, darf nicht höher sein als der Prozentsatz, in dem das Video geliefert wird. Wenn Sie einen Videoinhalt bereitstellen, ohne eine prozentuale Änderung zu erhalten, können Sie den Benutzer blockieren. weil sie sicher herunterladen.

Die Implementierung ist schwierig, da der Benutzer das Video vorwärts oder rückwärts überspringen kann. Seien Sie sich dessen bewusst, wenn Sie dies implementieren.

So geht BestDotnetTraining mit dem um 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);
            }
        });
    }

});

Auf jeden Fall kann der Benutzer dies umgehen, indem er eine Download-Methode verwendet, mit der eine Datei durch Streaming heruntergeladen wird. fast c # mach es sofort und für nodejs kannst du requestmodule verwenden. Dann müssen Sie eine stopWatch starten, ein empfangenes Paket anhören und das empfangene Gesamtbyte mit der Gesamtgröße vergleichen. Auf diese Weise können Sie einen Prozentsatz und die Zeit berechnen, die erforderlich ist, um diesen Prozentsatz zu erhalten. Verwenden Sie dann das Thread.Sleep()oder so etwas, um den Thread um den Betrag zu verzögern, den Sie warten müssen, wenn Sie das Video normal ansehen. Auch vor dem Ruhezustand kann der Benutzer den Server anrufen und den empfangenen Prozentsatz aktualisieren. Der Server glaubt also, dass der Benutzer tatsächlich ein Video ansieht.

Die Berechnung sieht ungefähr so ​​aus. Wenn Sie beispielsweise berechnen, dass Sie bisher 1 Prozent erhalten haben, können Sie den Betrag berechnen, den Sie warten sollten, um den Download-Thread zu beenden. Auf diese Weise können Sie ein Video nicht schneller als die tatsächliche Länge herunterladen. wenn ein Video 24 min ist. Das Herunterladen dauert 24 Minuten. (plus den Schwellenwert, den wir in die erste Methode gesetzt haben)

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

Überprüfen Sie den Browser-Agenten

Wenn Sie eine Webseite und den Videolink bereitstellen oder die Anforderung zur Fortschrittsaktualisierung annehmen, können Sie sich den Browser-Agenten ansehen. Wenn es anders ist, verbieten Sie den Benutzer.

Beachten Sie jedoch, dass einige alte Browser diese Informationen nicht weitergeben. Daher sollten Sie dies ignorieren, wenn sowohl in der Videoanforderung als auch in der Webseitenanforderung kein Browser-Agent vorhanden ist. Wenn eine Anfrage dies hat und eine andere nicht, sollten Sie den Benutzer sperren.

Um dies zu umgehen, kann der Benutzer den Browser-Agent-Header manuell auf den kopflosen Browser einstellen, mit dem er den Download-Link erfasst.

Überprüfen Sie den Referer-Header

Wenn der Referer etwas anderes als Ihre Host-URL oder die Seiten-URL ist, die Sie für das Video bereitstellen, können Sie den Benutzer sperren, da er den Download-Link in einen anderen Tab oder eine andere Anwendung einfügt. Sogar Sie können dies für die Fortschrittsaktualisierungsanforderung tun.

Voraussetzung dafür ist eine Zuordnung des Videos und der Seite, auf der das Video angezeigt wird. Sie können eine Konvention oder ein Muster erstellen, um zu verstehen, wie die URL lauten soll. Es liegt an Ihrem Design.

Um dies zu umgehen, kann der Benutzer den Referrer-Header beim Herunterladen der Videos manuell auf die URL der Download-Seite setzen.

Berechnen Sie die Zeit zwischen den Anforderungen

Wenn Sie so viele Anfragen erhalten, dass die Zeit zwischen ihnen gleich ist, sollten Sie den Benutzer blockieren. Sie sollten dies eingeben, um zu erfassen, wie viel Zeit zwischen der Anforderung zur Generierung von Videolinks liegt. Wenn sie gleich sind (plus / minus eines bestimmten Schwellenwerts) und dies mehr als mehrmals vorkommt, können Sie den Benutzer sperren. Denn wenn es einen Bot gibt, der Ihre Website oder Videos crawlt, haben sie normalerweise die gleiche Ruhezeit zwischen ihren Anfragen. Wenn Sie also jede Anfrage erhalten, zum Beispiel alle 1,3 Minuten (plus / min Abweichung). dann lösen Sie einen Alarm aus. Zu diesem Zweck können Sie eine statistische Berechnung verwenden, um die Abweichung zwischen den Anforderungen zu ermitteln.

Um dies zu umgehen, kann der Benutzer eine zufällige Ruhezeit zwischen die Anforderungen setzen.

Beispielcode

Ich habe einen Repo PluralSight-Downloader , der es auf halbem Weg macht. Ich habe dieses Repo vor fast 5 Jahren erstellt. Da ich es nur zu Studienzwecken und für den persönlichen Gebrauch geschrieben habe, hat das Repo bisher kein Update erhalten und ich werde es nicht aktualisieren oder die Arbeit vereinfachen. Es ist nur ein Beispiel dafür, wie es gemacht werden kann.



1

Kurze Antwort: Verschlüsseln Sie den Link wie bei YouTube. Sie wissen nicht, wie, und fragen Sie YouTube / Google, wie sie es tun. (Nur für den Fall, dass Sie direkt auf den Punkt kommen möchten.)

Ich möchte jeden darauf hinweisen, dass dies möglich ist, weil YouTube es tut und wenn sie es können, jede andere Website und es auch nicht vom Browser stammt, weil ich es auf einigen Browsern wie Microsoft Edge und Internet Explorer und getestet habe Es gibt also eine Möglichkeit, es zu deaktivieren und zu sehen, dass die Leute es immer noch sagen ... Ich versuche, nach einer Antwort zu suchen, denn wenn YouTube dies kann, muss es einen Weg geben, und der einzige Weg, um zu sehen, wie sie es tun, ist, wenn jemand nachschaut die Skripte von Youtube, die ich jetzt mache. Ich habe auch überprüft, ob es sich auch um ein benutzerdefiniertes Kontextmenü handelt, und das liegt nicht daran, dass das Kontextmenü das Inspect-Element überflutet, und ich meine, es ist darüber und ich habe nachgesehen und es wird nie eine neue Klasse erstellt und auch nicht Es ist unmöglich, mit Javascript auf das Inspect-Element zuzugreifen, also kann es nicht sein. Wenn Sie mit der rechten Maustaste auf ein YouTube-Video doppelklicken, können Sie feststellen, dass das Kontextmenü für Chrome angezeigt wird. Außerdem ... würde YouTube diese Funktion nicht hinzufügen. Ich recherchiere und schaue mir die Quelle von YouTube an, also werde ich zurück sein, wenn ich die Antwort finde ... wenn jemand sagt, dass du es nicht kannst, dann haben sie es nicht getan. Ich recherchiere nicht so wie ich. Der einzige Weg, um YouTube-Videos herunterzuladen, ist ein Video-Download.

Okay ... Ich habe recherchiert und meine Recherche bleibt, dass Sie es deaktivieren können, außer es gibt kein Javascript ... Sie müssen in der Lage sein, die Links zum Video zu verschlüsseln, damit Sie es deaktivieren können, weil ich denke, dass es welche gibt Der Browser zeigt es nicht an, wenn er es nicht finden kann. Als ich einen YouTube-Videolink öffnete, wurde er als "Blob" angezeigt. https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"Ohne Anführungszeichen verschlüsselt es es, damit es nicht gespeichert werden kann ... Sie müssen PHP dafür kennen, aber wie die Antwort, die Sie ausgewählt haben, um es schwieriger zu machen, macht YouTube es am schwierigsten, es zu verschlüsseln. Sie müssen ein Voraus PHP-Programmierer, aber wenn Sie das nicht wissen, dann nehmen Sie die Person, die Sie ausgewählt haben, als beste Antwort, um das Herunterladen zu erschweren ... aber wenn Sie PHP als schwer kennen, verschlüsseln Sie den Videolink so, dass er nur weitergelesen werden kann deine ... Ich weiß nicht, wie ich es erklären soll, aber sie haben es getan und es gibt einen Weg. Die Art und Weise, wie YouTube Videos verschlüsselt, ist ziemlich klug. Wenn du also wissen willst, wie es geht, frag einfach YouTube / Google, wie Sie tun es ... ich hoffe, dies hilft Ihnen, obwohl Sie bereits die beste Antwort ausgewählt haben. Daher ist die Verschlüsselung des Links kurzfristig am besten.


0

Es scheint, als ob das Streamen des Videos über den Websocket eine praktikable Option ist, da beim Streamen der Frames und Zeichnen auf einer Leinwand eine Art Sache.

Video-Streaming über Websockets mit JavaScript

Ich denke, dies würde eine weitere Schutzstufe bieten, die es dem Kunden erschwert, das Video zu erfassen und natürlich Ihr Problem mit der Kontextmenüoption "Video speichern unter ..." zu lösen (Overkill ?!).


0

Folgendes habe ich getan:

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>
Dies funktioniert auch für Bilder, Text und so ziemlich alles. Sie können jedoch weiterhin über Tastaturkürzel auf das Werkzeug "Inspizieren" und "Quelltext anzeigen" zugreifen. (Wie die Antwort oben sagt, können Sie es nicht ganz aufhalten.) Aber Sie können versuchen, Barrieren zu errichten, um sie zu stoppen.


-1

@ Clayton-Graul hatte das, wonach ich suchte, außer dass ich die CoffeeScript-Version für eine Site mit AngularJS benötigte. Nur für den Fall, dass Sie das auch brauchen, haben Sie Folgendes in den betreffenden AngularJS-Controller eingegeben:

    # 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

"Am Kreis k sind seltsame Dinge im Gange" (es ist wahr)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.