¿Cómo puedo desactivar "Guardar video como ..." en el menú contextual del navegador para evitar que los clientes descarguen un video?
¿Existen soluciones más completas que eviten que el cliente acceda a una ruta de archivo directamente?
¿Cómo puedo desactivar "Guardar video como ..." en el menú contextual del navegador para evitar que los clientes descarguen un video?
¿Existen soluciones más completas que eviten que el cliente acceda a una ruta de archivo directamente?
File→Save As
). Incluso si de alguna manera pudieras bloquear eso, pueden ver la fuente para encontrar la URL del archivo. Incluso si pudieras ocultar eso un poco, pueden extraerlo del caché. Incluso si pudiera complicar eso (por ejemplo, transmisión), pueden capturar el tráfico de red con un sniffer o algo así. El hecho es que si lo envía a un usuario, puede guardarlo. No hay forma de evitar eso. La pregunta que debe hacer es por qué necesita detenerlo tanto. ¿Es realmente tan necesario? ¿Vale la pena el esfuerzo y la hostilidad del usuario?Respuestas:
No se puede . Eso es porque para eso fueron diseñados los navegadores: Servir contenido . Pero puede dificultar la descarga .
Lo primero es lo primero, puede deshabilitar el
contextmenu
evento , también conocido como "el clic derecho". Eso evitaría que su skiddie regular rasgue descaradamente su video haciendo clic derecho y Guardar como. Pero luego podrían simplemente deshabilitar JS y evitar esto o encontrar la fuente de video a través del depurador del navegador. Además, esto es mala experiencia de usuario. Hay muchas cosas legítimas en un menú contextual además de Guardar como.También puede usar bibliotecas de reproductor de video personalizadas. La mayoría de ellos implementan reproductores de video que personalizan el menú contextual a su gusto. Entonces no obtienes el menú contextual predeterminado del navegador. Y si alguna vez sirven un elemento de menú similar a Guardar como, puede deshabilitarlo. Pero, de nuevo, esta es una solución alternativa de JS. Las debilidades son similares a la opción anterior.
Otra forma de hacerlo es servir el video usando HTTP Live Streaming . Lo que esencialmente hace es cortar el video en trozos y servirlo uno tras otro. Así es como la mayoría de los sitios de transmisión sirven videos. Entonces, incluso si logra guardar como, solo guarda un fragmento, no todo el video. Tomaría un poco más de esfuerzo reunir todos los trozos y unirlos con algún software dedicado.
Otra técnica consiste en pintar
<video>
sobre<canvas>
. En esta técnica, con un poco de JavaScript, lo que ves en la página es un<canvas>
elemento que procesa fotogramas desde un oculto<video>
. Y debido a que es un<canvas>
, el menú contextual usará un<img>
menú 's, no un<video>
' s. Obtendrá Guardar imagen como en lugar de Guardar video como.También puede usar tokens CSRF para su ventaja. Tendría que su servidor envíe un token en la página. Luego usas ese token para buscar tu video. Su servidor verifica si es un token válido antes de publicar el video u obtiene un HTTP 401 . La idea es que solo puede obtener un video si tiene un token que solo puede obtener si viene de la página, no visitando directamente la URL del video.
Al final del día, simplemente subiría mi video a un sitio de videos de terceros, como YouTube o Vimeo. Tienen buenas herramientas de administración de video, optimizan la reproducción en el dispositivo y hacen esfuerzos para evitar que sus videos se graben sin ningún esfuerzo por su parte.
fuente
src
de<video>
. Para cuando su página se ha cargado, la base de datos tiene el token, la página tiene el token. Una vez que<video>
comienza a cargarse (accede al punto final), el servidor verifica si el token está en la base de datos, lo elimina y transmite el archivo. Si el token no está allí como resultado del segundo acceso , no transmita el archivo.Esta es una solución simple para aquellos que desean simplemente eliminar la opción "guardar" con el botón derecho de los videos html5
fuente
src
atributo y ábralo en otra pestaña o úselowget
para descargarlo!Respuesta simple,
NO PUEDES
Si están viendo tu video, ya lo tienen
fuente
Sí, puedes hacer esto en tres pasos:
Guarde un archivo en ese subdirectorio llamado ".htaccess" y agregue las líneas a continuación.
Ahora el enlace de origen es inútil , pero aún debemos asegurarnos de que cualquier usuario que intente descargar el archivo no pueda recibir directamente el archivo.
Para una solución más completa , ahora sirva el video con un reproductor flash (o lienzo html) y nunca enlace directamente al video. Para eliminar el menú del botón derecho, agregue a su HTML:
El resultado:
www.foo.com/player.html reproducirá correctamente el video , pero si visita www.foo.com/videos/video.mp4:
Esto funcionará para descarga directa, cURL, hotlinking, lo que sea.
Esta es una respuesta completa a las dos preguntas formuladas y no una respuesta a la pregunta: "¿puedo evitar que un usuario descargue un video que ya ha descargado?"
fuente
.htaccess
contenidoLa mejor manera que suelo usar es muy simple: deshabilito completamente el menú contextual en toda la página, html + javascript puro:
¡Eso es! Lo hago porque siempre puedes ver la fuente haciendo clic derecho.
Ok, dices: "Puedo usar directamente la fuente de visualización del navegador" y es cierto, pero comenzamos por el hecho de que NO PUEDES dejar de descargar
html5
videos.fuente
Como desarrollador del lado del cliente, recomiendo usar blob URL, blob URL es una URL del lado del cliente que se refiere a un objeto binario
en HTML deje su video en
src
blanco, y en JS busque el archivo de video usando AJAX, asegúrese de que el tipo de respuesta sea blobNota: este método no se recomienda para archivos grandes
EDITAR
Utilice el bloqueo de origen cruzado para evitar la descarga directa
si el video es entregado por una API Use un método diferente (PUT / POST) en lugar de 'GET'
fuente
PHP envía la etiqueta de video html5 junto con una sesión donde la clave es una cadena aleatoria y el valor es el nombre del archivo.
Ahora se le pide a PHP que envíe el video. PHP recupera el nombre del archivo; elimina la sesión y envía el video al instante. Además, todos los encabezados tipo "no cache" y mime deben estar presentes.
Ahora, si el usuario copia la url en una nueva pestaña o usa el menú contextual, no tendrá suerte.
fuente
Al menos puede evitar que las personas no expertas en tecnología utilicen el menú contextual del botón derecho para descargar su video. Puede deshabilitar el menú contextual para cualquier elemento utilizando el atributo oncontextmenu.
Esto funciona para el elemento del cuerpo (página completa) o para un solo video usándolo dentro de la etiqueta de video.
fuente
Terminamos usando AWS CloudFront con URL caducadas. El video se cargará, pero para cuando el usuario haga clic derecho y elija Guardar como la url del video que recibió inicialmente ha expirado. Realice una búsqueda de Identidad de acceso a origen de CloudFront.
La producción de la URL del video requiere un par de claves que se pueden crear en la CLI de AWS. FYI, este no es mi código, ¡pero funciona muy bien!
fuente
Podríamos hacer que no sea tan fácil ocultando el menú contextual, así:
fuente
+1 de forma simple y cruzada: también puede colocar una imagen transparente sobre el video con css z-index y opacidad. Por lo tanto, los usuarios verán "guardar imagen como" en lugar de "guardar video" en el menú contextual.
fuente
los
Ya no funciona. Chrome y Opera a partir de junio de 2018 tienen un submenú en la línea de tiempo para permitir la descarga directa, por lo que el usuario no necesita hacer clic derecho para descargar ese video. Curiosamente, Firefox y Edge no tienen esto ...
fuente
Usando un servicio como Vimeo: Inicie sesión
Vimeo > Goto Video > Settings > Privacy > Mark as Secured
y también seleccione dominios incrustados. Una vez que se configuran los dominios de inserción, no permitirá que nadie incruste el video o lo muestre desde el navegador a menos que se conecte desde los dominios especificados. Por lo tanto, si tiene una página segura en su servidor que carga el reproductor Vimeo en iframe, esto hace que sea bastante difícil moverse.fuente
En primer lugar , tenga en cuenta que es imposible evitar por completo la descarga de un video, todo lo que puede hacer es hacerlo más difícil . Es decir, escondes la fuente del video.
Un navegador web descarga temporalmente el video en un búfer, por lo que si pudiera evitar la descarga, también evitaría que se vea el video.
También debe saber que <1% de la población total del mundo podrá comprender el código fuente, lo que lo hace bastante seguro de todos modos. Eso no significa que no deba ocultarlo también en la fuente, debería hacerlo .
Usted debe no deshabilitar el botón derecho, y menos aún debe mostrar un mensaje que dice
"You cannot save this video for copyright reasons. Sorry about that."
. Como se sugiere en esta respuesta .Esto puede ser muy molesto y confuso para el usuario. Aparte de eso; si deshabilitan JavaScript en su navegador , podrán hacer clic derecho y guardar de todos modos.
Aquí hay un truco CSS que puedes usar:
CSS no se puede desactivar en el navegador, protegiendo su video sin deshabilitar el clic derecho. Sin embargo, un problema es que
controls
tampoco se puede habilitar, en otras palabras, deben configurarsefalse
. Si va a implementar su propia función Reproducir / Pausa o usar una API que tiene botones separados a lavideo
etiqueta, entonces esta es una opción factible.controls
también tiene un botón de descarga, por lo que usarlo tampoco es una buena idea.Aquí hay un ejemplo de JSFiddle .
Si va a deshabilitar el clic derecho usando JavaScript, también almacene la fuente del video en JavaScript también. De esa manera, si el usuario deshabilita JavaScript (permitiendo el clic derecho), el video no se cargará (también oculta la fuente de video un poco mejor).
De la respuesta TxRegex :
Ahora agregue el video a través de JavaScript:
JSFiddle funcional
Otra forma de evitar el clic derecho implica usar la
embed
etiqueta. Sin embargo, esto no proporciona los controles para ejecutar el video, por lo que tendrían que ser implementados en JavaScript:fuente
pointer-events: none;
bueno, no puedes protegerlo al 100% pero puedes hacerlo más difícil. Estos métodos que estoy explicando los enfrenté durante el estudio de los métodos de protección en PluralSight y BestDotNetTraining . sin embargo, ninguno de estos métodos me impidió descargar lo que quiero, pero tuve dificultades para seleccionar al descargador para que pasara su protección.
Además de otros métodos mencionados para deshabilitar el menú contextual. el usuario aún puede usar herramientas de terceros como InternetDownload manager u otro software similar para descargar los videos. El método de protección que estoy explicando aquí es mitigar el software de terceros.
El requisito de todos estos métodos es bloquear a un usuario cuando identifica que alguien está descargando sus videos. de esta manera, solo pueden descargar uno o dos videos antes de que les prohibiera el acceso a su sitio web.
Descargo de responsabilidad
No aceptaré ninguna responsabilidad si alguien abusa de estos métodos o lo usa para dañar a otros o los sitios web que mencioné como ejemplo. es solo para compartir conocimientos para ayudarlo a proteger su producto intelectual.
generar enlaces con vencimiento
El requisito para esto es crear un enlace de descarga por usuario. ese puede ser fácilmente manejado por azure blob storage o amazon s3. puede crear un enlace de descarga con el doble de la marca de tiempo de caducidad del video. entonces necesita capturar ese enlace de video y el tiempo que se solicita. Esto es necesario para el siguiente método. El problema con este método es que está generando el enlace de descarga cuando el usuario hace clic en el botón Reproducir.
En el evento de botón de reproducción, enviará una solicitud al servidor y obtendrá el enlace y actualizará la fuente.
acelerar la tasa de solicitud de video
luego monitorea qué tan rápido solicita el usuario el segundo video. si el usuario solicita un enlace de descarga demasiado rápido, los bloquea de inmediato. no puede poner este umbral demasiado grande porque puede bloquear por error a los usuarios que solo están navegando o hojeando los videos.
Habilitar rango HTTP
use una biblioteca js como videojs para reproducir su video, también debe devolver un AcceptRange en su encabezado. Azure Blob Storage lo admite de forma inmediata. de esta manera, el navegador comienza a descargar el video fragmento por fragmento. generalmente, 32byte por 32byte. entonces debe escuchar el
timeupdate
cambio de videojs y actualizar su servidor sobre el porcentaje de reproducción del video. el porcentaje que se ve el video no puede ser mayor que el porcentaje que se entrega el video. y si está entregando un contenido de video sin recibir ningún cambio porcentual, puede bloquear al usuario. porque seguro que se están descargando.implementar esto es complicado porque el usuario puede omitir el video hacia adelante o hacia atrás, así que tenga en cuenta esto cuando lo implemente.
así es como BestDotnetTraining está manejando el
timeupdate
de todos modos, el usuario puede solucionar esto utilizando algún método de descarga que descargue un archivo a través de la transmisión. casi c # lo hace fuera de la caja y para nodejs, puede usar el
request
módulo. entonces debe iniciar un cronómetro, escuchar un paquete recibido y comparar el byte total recibido en comparación con el tamaño total. de esta manera puede calcular un porcentaje y el tiempo empleado para obtener esa cantidad de porcentaje. luego useThread.Sleep()
o algo así para retrasar el hilo la cantidad que tiene que esperar si mira el video normalmente. también antes de la suspensión, el usuario puede llamar al servidor y actualizar el porcentaje que se recibe. entonces el servidor piensa que el usuario realmente está viendo un video.el cálculo será algo como esto, por ejemplo, si calcula que recibió el 1 por ciento hasta ahora, puede calcular la cantidad que debe esperar para dormir el hilo de descarga. de esta manera no puede descargar un video más rápido de lo que es su duración real. si un video es de 24 min. Tardará 24 minutos en descargarlo. (más el umbral que ponemos en el primer método)
verifique el agente del navegador
cuando está sirviendo una página web y sirviendo el enlace del video o aceptando la solicitud de actualización de progreso, puede mirar al agente del navegador. si es diferente, entonces prohíba al usuario.
solo tenga en cuenta que algunos navegadores antiguos no pasan esta información. por lo tanto, debe ignorar esto cuando no haya un agente de navegador tanto en la solicitud de video como en la solicitud de página web. pero si una solicitud la tiene y otra no, entonces debe prohibir al usuario.
Para solucionar este problema, el usuario puede configurar el encabezado del agente del navegador manualmente igual que el navegador sin cabeza que está utilizando para capturar el enlace de descarga.
verifique el encabezado del árbitro
cuando el árbitro no es la URL de su host o la URL de la página a la que está enviando el video, puede prohibir al usuario, ya que coloca el enlace de descarga en otra pestaña u otra aplicación. incluso puede hacerlo para la solicitud de actualización de progreso.
el requisito para esto es tener una asignación de video y la página que muestra ese video. puede crear alguna convención o patrón para comprender cuál debería ser la URL, depende de su diseño.
para evitarlo, el usuario puede establecer el encabezado de referencia de forma manual igual a la URL de la página de descarga al descargar los videos.
Calcule el tiempo entre solicitudes
Si recibe tantas solicitudes que el tiempo entre ellas es el mismo, debe bloquear al usuario. debe poner esto para capturar cuánto tiempo transcurre entre la solicitud de generación de enlace de video. si son iguales (más / menos algún umbral) y ocurre más de una cantidad de veces, puede prohibir al usuario. porque si hay un robot que va a rastrear su sitio web o videos, entonces generalmente tienen el mismo tiempo de sueño entre su solicitud. así que si recibe cada solicitud, por ejemplo, cada 1.3 minutos (más / minutos de alguna desviación). Entonces levantas la alarma. para esto, puede usar algunos cálculos estadísticos para conocer la desviación entre las solicitudes.
Para solucionar esto, el usuario puede poner un tiempo de suspensión aleatorio entre las solicitudes.
Código de muestra
Tengo un repositorio PluralSight-Downloader que lo está haciendo a mitad de camino. Creé este repositorio hace casi 5 años. porque lo escribí solo para fines de estudio y para uso personal, el repositorio no ha recibido ninguna actualización hasta el momento y no voy a actualizar ni facilitar el trabajo. Es solo un ejemplo de cómo se puede hacer.
fuente
Puedes usar
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/controlsList
No evita guardar el video, pero elimina el botón de descarga y la opción "Guardar como" en el menú contextual.
fuente
Respuesta corta: Cifre el enlace como lo hace youtube, no sé cómo preguntar a youtube / google cómo lo hacen. (Solo en caso de que quiera ir directamente al punto).
Me gustaría señalar a cualquiera que esto es posible porque YouTube lo hace y, si pueden, puede hacerlo cualquier otro sitio web y tampoco desde el navegador porque lo probé en un par de navegadores como Microsoft Edge e Internet Explorer y así que hay una manera de deshabilitarlo y veo que la gente todavía lo dice ... Intento buscar una respuesta porque si YouTube puede, entonces tiene que haber una manera y la única forma de ver cómo lo hacen es si alguien investigó los guiones de youtube que estoy haciendo ahora. También verifiqué si era un menú contextual personalizado y no es porque el menú contextual está sobrecargando el elemento de inspección y quiero decir que ya pasó y miré y nunca crea una nueva clase y también Es imposible acceder realmente al elemento de inspección con JavaScript, por lo que no puede serlo. Puede saber cuando hace doble clic derecho en un video de YouTube que aparece el menú contextual de Chrome. Además ... youtube no agregaría esa función. Estoy investigando y buscando en la fuente de youtube, así que volveré si encuentro la respuesta ... si alguien dice que no puedes, entonces no lo hicieron. No investigue como yo. La única forma de descargar videos de YouTube es a través de una descarga de video.
De acuerdo ... Investigué y mi investigación dice que puedes deshabilitarlo, excepto que no tiene JavaScript ... tienes que poder cifrar los enlaces al video para que puedas deshabilitarlo porque creo que cualquier el navegador no lo mostrará si no puede encontrarlo y cuando abrí un enlace de video de YouTube se mostró como este "blob: https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"sin comillas, por lo que lo está encriptando para que no se pueda guardar ... necesita saber php para eso, pero al igual que la respuesta que eligió para hacerlo más difícil, YouTube hace que sea más difícil de encriptarlo, necesita ser un programador avanzado de php, pero si no sabe eso, tome la persona que eligió como la mejor respuesta para dificultar la descarga ... pero si sabe php que encriptar el enlace de video para que solo pueda leerse la suya ... No sé cómo explicar cómo lo hacen, pero lo hicieron y hay una manera. La forma en que YouTube Cifra sus videos es bastante inteligente, así que si quieres saber cómo hacerlo, simplemente pregúntale a YouTube / Google cómo lo hacen ... espero que esto te ayude aunque ya hayas elegido la mejor respuesta. Por lo tanto, encriptar el enlace es mejor a corto plazo.
fuente
Parece que transmitir el video a través de websocket es una opción viable, como transmitir los cuadros y dibujarlos en un lienzo.
Transmisión de video a través de websockets usando JavaScript
Creo que eso proporcionaría otro nivel de protección haciendo que sea más difícil para el cliente adquirir el video y, por supuesto, resolver su problema con la opción "Guardar video como ..." con el botón derecho del menú contextual (¿demasiado?).
fuente
Esto es lo que hice:
fuente
@ Clayton-Graul tenía lo que estaba buscando, excepto que necesitaba la versión CoffeeScript para un sitio que usa AngularJS. En caso de que también lo necesites, esto es lo que pones en el controlador AngularJS en cuestión:
"Hay cosas extrañas en el círculo k" (es verdad)
fuente