Contao 5: Video herunterladen verhindern
Anleitung für Contao 5.3
Rechtsklick-Schutz für Videos in Contao 5 mit Twig-Template-Override
Das Schulungsvideo war für zahlende Kunden gedacht – zwei Wochen später kursiert es im Netz. Solche Anrufe erreichen jede Agentur irgendwann, und die erste Frage lautet immer gleich: Kann man das Herunterladen nicht einfach sperren?
Die kurze Antwort: Man kann es erschweren. Videos landen in Contao über das Inhaltselement „Video/Audio“ oder externe Anbieter im Player – und der Browser bietet ab Werk Rechtsklick, Kontextmenü und teils sogar einen Download-Knopf an. Ein Twig-Template-Override entfernt diese bequemen Wege. Was er leistet, wo seine Grenzen liegen und was bei echtem Schutzbedarf wirklich hilft, klärt dieser Beitrag – einschließlich der Grundsatzfrage, ob sich der Aufwand überhaupt lohnt.
Template in Contao anlegen
Im Projektverzeichnis wird ein neuer Ordner angelegt: /templates/content_element/player.html.twig
Erweiterung des Core-Templates
Das neue Template erweitert das Core-Template und ergänzt Attribute sowie ein kurzes Script, um das Kontextmenü zu blockieren:
{% extends '@Contao/content_element/player.html.twig' %}
{% block content %}
{{ parent() }}
<script>
(function(){
var wrapper = document.currentScript.closest('.content-player') || document.currentScript.parentElement;
if(!wrapper) return;
var v = wrapper.querySelector('video, audio, iframe');
if (v) {
try { v.setAttribute('controlsList', 'nodownload noplaybackrate'); } catch(e){}
v.setAttribute('disablepictureinpicture','');
v.addEventListener('contextmenu', function(e){ e.preventDefault(); });
v.addEventListener('dragstart', function(e){ e.preventDefault(); });
}
})();
</script>
{% endblock %}
Wirkung der Anpassung
controlsList="nodownload noplaybackrate"blendet Download- und Geschwindigkeitsoptionen aus (Browser-abhängig).disablepictureinpicturedeaktiviert die PiP-Funktion in Chromium-Browsern.- Das JavaScript blockiert das Kontextmenü und verhindert Drag&Drop-Aktionen.
Typische Stolperfallen
- Der Template-Name muss exakt
player.html.twigheißen. - Nach Änderungen muss der Cache geleert werden.
Lohnt sich das überhaupt? Eine ehrliche Einordnung
Kurz gesagt: Die gezeigte Lösung entfernt die bequemen Wege – Rechtsklick, Download-Knopf im Player. Sie verhindert das Herunterladen nicht. Wer die Entwicklerwerkzeuge öffnet, findet die Videodatei in wenigen Sekunden. Das ist keine Schwäche der Umsetzung, sondern eine Eigenschaft des Webs: Was der Browser abspielen kann, hat er bereits geladen.
Zwei Lager, zwei gute Argumente
Dafür: Die meisten Menschen sind keine Diebe, sondern bequem. Wer den Download-Knopf im Player nicht sieht, kopiert das Video nicht – ein niedrigschwelliger Schutz senkt die Zahl der Kopien spürbar. Dazu kommt ein rechtlicher Aspekt: Wer erkennbar Schutzmaßnahmen ergreift, dokumentiert seinen Willen, das Material nicht freizugeben. Und für Kundenschulungen oder interne Videos ist ein simpler Riegel oft ausreichend.
Dagegen: Kritiker halten solche Maßnahmen für Sicherheitstheater. Sie verhindern nichts, kosten Bedienkomfort und behindern legitime Nutzung – etwa das Speichern für die spätere Ansicht ohne Internetverbindung. Deaktivierte Wiedergabegeschwindigkeit trifft ausgerechnet jene, die Inhalte langsamer oder schneller brauchen. Und wer den Rechtsklick global sperrt, sperrt auch „Link in neuem Tab öffnen" – ein spürbarer Eingriff für alle, gegen wenige.
Was tatsächlich schützt – nach Schutzbedarf gestaffelt
- Niedrig (Marketing, Imagefilme): Gar kein Schutz. Reichweite ist wertvoller als Kontrolle. Ein Wasserzeichen im Bild reicht, um die Herkunft zu belegen.
- Mittel (Schulungsvideos, Kundenbereich): Zugriff über einen geschützten Mitgliederbereich, Videos nicht öffentlich verlinkt, Auslieferung über signierte URLs mit kurzer Gültigkeit – ein direkter Link funktioniert dann nach wenigen Minuten nicht mehr.
- Hoch (bezahlte Inhalte, Kurse): Streaming statt Dateiauslieferung (HLS mit segmentierten Dateien), individuelles Wasserzeichen mit Nutzerkennung im Bild, im Extremfall DRM über einen spezialisierten Anbieter. Alles darunter ist Kosmetik.
Signierte URLs: der wirksamste einfache Schritt
// Video-Link nur kurz gültig machen (Beispiel: 10 Minuten)
$datei = 'schulung-01.mp4';
$ablauf = time() + 600;
$geheim = $_ENV['VIDEO_SECRET'];
$signatur = hash_hmac('sha256', $datei . $ablauf, $geheim);
$url = sprintf('/video/%s?ablauf=%d&sig=%s', $datei, $ablauf, $signatur);
// Prüfung beim Ausliefern
$erwartet = hash_hmac('sha256', $datei . (int) $_GET['ablauf'], $geheim);
if (!hash_equals($erwartet, (string) $_GET['sig']) || time() > (int) $_GET['ablauf']) {
throw new AccessDeniedException('Link abgelaufen.');
}# nginx: Videos nicht direkt aus dem Dateisystem ausliefern
location /files/videos/ {
internal; # nur über X-Accel-Redirect erreichbar
}
# PHP entscheidet über den Zugriff und reicht die Datei durch:
# header("X-Accel-Redirect: /files/videos/schulung-01.mp4");Der ehrliche Schluss: Ein Rechtsklick-Schutz ist eine Bremsschwelle, kein Zaun. Wer sein Material wirklich schützen muss, verlagert die Kontrolle vom Browser auf den Server – alles andere hält nur jene ab, die ohnehin nicht kopiert hätten. Die Frage ist deshalb nicht „Wie sperre ich?", sondern „Was passiert im schlimmsten Fall, wenn dieses Video kopiert wird?". Für die meisten Unternehmensvideos lautet die ehrliche Antwort: nicht viel.
Fazit: eine Bremsschwelle, kein Zaun
Der Template-Override in Contao 5 entfernt Download-Knopf, Kontextmenü und Bild-in-Bild-Modus – sauber, updatesicher und ohne Erweiterung. Was er nicht leistet: das Herunterladen tatsächlich verhindern. Für Imagefilme und Schulungsvideos ist diese Bremsschwelle in der Regel genau richtig; wo echter Schutz nötig ist, führt der Weg über geschützte Bereiche, signierte URLs und Streaming. Wer beides auseinanderhält, spart sich falsche Sicherheit – und die Enttäuschung, wenn das Video doch irgendwo auftaucht.