210 votes

Empêcher le téléchargement d'une vidéo HTML5 (clic droit enregistré) ?

Comment désactiver l'option "Enregistrer la vidéo sous..." du menu contextuel d'un navigateur pour empêcher les clients de télécharger une vidéo ?

Existe-t-il des solutions plus complètes qui empêchent le client d'accéder directement à un chemin de fichier ?

3 votes

J'ai voté pour cette question parce qu'elle ne demande absolument pour savoir comment "désactiver le clic droit" pour une vidéo HTML5. Je ne sais pas si c'est similaire à la désactivation du clic droit pour les images normales ou s'il y a d'autres astuces de superposition, etc. qui peuvent être appliquées.

11 votes

Même si vous désactivez le clic droit, ils peuvent toujours l'enregistrer à partir du menu du navigateur ( FileSave As ). Même si vous pouviez bloquer ça, ils peuvent vue-source pour trouver l'URL du fichier. Même si vous pouvez l'obscurcir un peu, ils peuvent l'extraire du cache. Même si vous pouvez compliquer cela (par exemple, le streaming), ils peuvent capturer le trafic réseau avec un renifleur ou autre. Le fait est que si vous l'envoyez à un utilisateur, il peut l'enregistrer. Il n'y a aucun moyen de contourner cela. La question que vous devez vous poser est de savoir pourquoi vous avez tant besoin de l'arrêter. Est-ce vraiment nécessaire ? Cela vaut-il la peine de faire des efforts et d'être peu convivial ?

0 votes

Je préfère la réponse TxRegex comme solution de base rapide.

297voto

Joseph the Dreamer Points 43727

Vous ne pouvez pas . C'est parce que c'est ce pour quoi les navigateurs ont été conçus : Servir le contenu . Mais vous pouvez rendre le téléchargement plus difficile .

Tout d'abord, vous pourrait désactiver le contextmenu événement alias "le clic droit". Cela empêcherait votre skiddie habituel de déchirer ouvertement votre vidéo en faisant un clic droit et en l'enregistrant sous. Mais alors ils pourraient simplement désactiver JS et contourner ce problème ou trouver la source de la vidéo via le débogueur du navigateur. De plus, c'est une mauvaise ergonomie. Il y a beaucoup d'autres choses légitimes dans un menu contextuel que juste Enregistrer sous.

Vous pouvez également utiliser des bibliothèques de lecteurs vidéo personnalisées. La plupart d'entre elles mettent en œuvre des lecteurs vidéo qui personnalisent le menu contextuel à votre convenance. Ainsi, vous n'obtenez pas le menu contextuel par défaut du navigateur. Et si jamais ils proposent un élément de menu similaire à Enregistrer sous, vous pouvez le désactiver. Mais là encore, il s'agit d'une solution de contournement JS. Les faiblesses sont similaires à celles de l'option précédente.

Une autre façon de procéder est de servir la vidéo en utilisant Diffusion en direct par HTTP . Il s'agit essentiellement de découper la vidéo en morceaux et de les servir l'un après l'autre. C'est ainsi que la plupart des sites de streaming diffusent les vidéos. Ainsi, même si vous parvenez à enregistrer sous, vous ne sauvegardez qu'un morceau, et non la vidéo entière. Il faudrait un peu plus d'efforts pour rassembler tous les morceaux et les assembler à l'aide d'un logiciel spécialisé.

Une autre technique consiste à peinture <video> sur <canvas> . Dans cette technique, avec un peu de JavaScript, ce que vous voyez sur la page est une <canvas> qui rend les images d'un élément caché <video> . Et parce que c'est un <canvas> le menu contextuel utilisera un <img> et non un <video> 's. Vous obtiendrez un enregistrement d'image sous au lieu d'un enregistrement de vidéo sous.

Vous pouvez également utiliser Jetons CSRF à votre avantage. Votre serveur envoie un jeton sur la page. Vous utilisez ensuite ce jeton pour récupérer votre vidéo. Votre serveur vérifie s'il s'agit d'un jeton valide avant de servir la vidéo, ou reçoit un HTTP 401 . L'idée est que vous ne pouvez obtenir une vidéo que si vous disposez d'un jeton que vous ne pouvez obtenir que si vous venez de la page, sans visiter directement l'url de la vidéo.

En fin de compte, je téléchargerais simplement ma vidéo sur un site vidéo tiers, comme YouTube ou Vimeo. Ils ont de bons outils de gestion de la vidéo, optimisent la lecture sur l'appareil et s'efforcent d'empêcher le piratage de leurs vidéos, sans aucun effort de votre part.

1 votes

Merci pour la réponse détaillée, est-il possible au moins de désactiver l'option "enregistrer sous" du menu du clic droit ? cela couvrirait la plupart des cas de connaissance de base.

2 votes

Cela dépend du navigateur. j'ai vu à plusieurs reprises (en particulier firefox et chrome) que si la vidéo est entièrement chargée, lorsque vous cliquez sur "enregistrer", ils prennent simplement la vidéo dans le cache au lieu de la retélécharger (la vidéo est déjà téléchargée dans le cache, pourquoi la télécharger à nouveau ?), il n'y a donc pas de deuxième demande. la méthode ci-dessus est applicable uniquement lorsque le lien est réutilisé.

0 votes

En fait, cela me dérangerait moins qu'ils le téléchargent depuis le cache ou le serveur, je comprends que cela ne peut pas être empêché à 100%, mais j'aimerais qu'au moins lorsque les clients font un clic droit sur la vidéo, l'option Enregistrer sous apparaisse en gris ou ne soit pas visible, je pense que cela empêchera les 80% d'utilisateurs avides de télécharger le contenu.

128voto

Clayton Graul Points 383

Il s'agit d'une solution simple pour ceux qui souhaitent simplement supprimer l'option "enregistrer" du clic droit sur les vidéos html5.

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

1 votes

C'est fantastique ! C'est un excellent moyen d'empêcher les gens ordinaires de télécharger la vidéo !

3 votes

Toutefois, cela ne sert à rien si JavaScript est désactivé dans le navigateur.

3 votes

Merci, cette solution est suffisante pour 90 % de nos visiteurs.

45voto

Starx Points 38727

Réponse simple,

VOUS NE POUVEZ PAS

S'ils regardent votre vidéo, ils l'ont déjà

Vous pouvez les ralentir mais pas les arrêter.

2 votes

À propos, cette réponse s'applique aux vidéos HTML5, aux vidéos flash, ou à toute autre technologie que vous pourrez imaginer à l'avenir. C'est simple : c'est comme ça que ça marche.

0 votes

Et qu'en est-il de youtube ? sur youtube vous ne pouvez pas découvrir le fichier vidéo facilement. Je veux dire que ok, vous avez raison, nous pouvons, mais il est plus facile de cacher la source mp4 sur youtube ou un hébergement vidéo similaire que d'héberger un simple mp4 sur notre serveur et d'utiliser le lecteur html5.

3 votes

Ce n'est pas une réponse à l'une ou l'autre des questions.

27voto

Daniele Cannova Points 21

Le meilleur moyen que j'utilise habituellement est très simple, je désactive complètement le menu contextuel dans toute la page, purement html+javascript :

 <body oncontextmenu="return false;">

C'est ça ! Je fais ça parce que vous pouvez toujours voir la source par un clic droit.
Ok, vous dites : "Je peux utiliser directement la source de la vue du navigateur" et c'est vrai, mais nous partons du fait que vous JE NE PEUX PAS arrêter de télécharger html5 vidéos.

0 votes

Je pense que la solution doit être une solution qui ne dérange pas les utilisateurs "normaux", désactiver le clic droit empêchera les utilisateurs de copier et coller du texte, ou de rechercher un mot qui les intéresse, par exemple le titre de la vidéo, bien sûr tous les utilisateurs ne feront pas cela mais cela peut être ennuyeux pour certains d'entre eux.

13voto

B.F. Points 128

PHP envoie la balise vidéo html5 avec une session où la clé est une chaîne aléatoire et la valeur est le nom du fichier.

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

Il est maintenant demandé à PHP d'envoyer la vidéo. PHP récupère le nom du fichier, supprime la session et envoie la vidéo instantanément. De plus, tous les en-têtes "no cache" et mime-type doivent être présents.

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:

Maintenant, si l'utilisateur copie l'url dans un nouvel onglet ou utilise le menu contextuel, il n'aura pas de chance.

2 votes

J'aime la solution - elle résout la question du PO. Malheureusement, lorsque l'utilisateur vérifie le code source dans Chrome et clique avec le bouton droit de la souris sur le lien. L'utilisateur téléchargera un fichier html, qui sera en fait le fichier vidéo.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X