Como posso desativar "Salvar vídeo como ..." no menu de atalho do navegador para impedir que os clientes baixem um vídeo?
Existem soluções mais completas que impedem o cliente de acessar diretamente o caminho de um arquivo?
Como posso desativar "Salvar vídeo como ..." no menu de atalho do navegador para impedir que os clientes baixem um vídeo?
Existem soluções mais completas que impedem o cliente de acessar diretamente o caminho de um arquivo?
File→Save As
). Mesmo que você possa bloquear isso, eles podem visualizar a fonte para encontrar o URL do arquivo. Mesmo que você possa obscurecer um pouco, eles podem extraí-lo do cache. Mesmo que você possa complicar isso (por exemplo, fluxo), eles podem capturar o tráfego da rede com um sniffer ou algo assim. O fato é que, se você enviar para um usuário, ele poderá salvá-lo. Não há maneira de contornar isso. A pergunta que você precisa fazer é por que você precisa parar tanto. É mesmo necessário? Vale a pena o esforço e a hostilidade do usuário?Respostas:
Você não pode . Isso é o que os navegadores foram projetados para fazer: exibir conteúdo . Mas você pode dificultar o download .
Primeiro, você pode desativar o
contextmenu
evento , também conhecido como "clique com o botão direito". Isso impediria que seu skiddie comum rasgasse seu vídeo descaradamente clicando com o botão direito do mouse e Salvar como. Mas eles poderiam simplesmente desativar o JS e contornar isso ou encontrar a fonte de vídeo através do depurador do navegador. Além disso, este é um mau UX. Há muitas coisas legítimas em um menu de contexto do que apenas Salvar como.Você também pode usar bibliotecas personalizadas do player de vídeo. A maioria deles implementa players de vídeo que personalizam o menu de contexto ao seu gosto. Portanto, você não obtém o menu de contexto do navegador padrão. E, se houver, eles servem um item de menu semelhante ao Salvar como, você pode desativá-lo. Mas, novamente, esta é uma solução JS. Fraquezas são semelhantes à opção anterior.
Outra maneira de fazer isso é veicular o vídeo usando o HTTP Live Streaming . O que ele basicamente faz é dividir o vídeo em pedaços e servi-lo um após o outro. É assim que a maioria dos sites de streaming veiculam vídeos. Portanto, mesmo que você consiga salvar como, salve apenas um pedaço, não o vídeo inteiro. Seria necessário um pouco mais de esforço para reunir todos os pedaços e costurá-los usando algum software dedicado.
Outra técnica é a pintar
<video>
sobre<canvas>
. Nesta técnica, com um pouco de JavaScript, o que você vê na página é um<canvas>
elemento que renderiza quadros de um oculto<video>
. E por ser um<canvas>
, o menu de contexto usará o menu de um<img>
, não um<video>
. Você receberá um Salvar imagem como em vez de um Salvar vídeo como.Você também pode usar tokens CSRF para sua vantagem. Seu servidor enviaria um token na página. Você então usa esse token para buscar seu vídeo. Seu servidor verifica se é um token válido antes de exibir o vídeo ou obtém um HTTP 401 . A idéia é que você só pode obter um vídeo com um token que só poderá obter se vier da página e não visitar diretamente o URL do vídeo.
No final do dia, eu acabava de enviar meu vídeo para um site de vídeo de terceiros, como o YouTube ou o Vimeo. Eles têm boas ferramentas de gerenciamento de vídeo, otimizam a reprodução no dispositivo e fazem esforços para impedir que seus vídeos sejam copiados com o máximo esforço possível.
fonte
src
do<video>
. No momento em que sua página é carregada, o banco de dados possui o token, a página possui o token. Depois<video>
que o carregamento é iniciado (acessa o terminal), o servidor verifica se o token está no banco de dados, o exclui e transmite o arquivo. Se o token não estiver lá como resultado do segundo acesso , não transmita o arquivo.Esta é uma solução simples para aqueles que desejam simplesmente remover a opção "salvar" do botão direito dos vídeos html5
fonte
src
atributo e abrir em outra guia ou usarwget
para fazer o download!Resposta simples,
VOCÊ NÃO PODE
Se eles estão assistindo seu vídeo, eles já o têm
fonte
Sim, você pode fazer isso em três etapas:
Salve um arquivo nesse subdiretório chamado ".htaccess" e adicione as linhas abaixo.
Agora, o link de origem é inútil , mas ainda precisamos garantir que qualquer usuário que esteja tentando fazer o download do arquivo não possa receber diretamente o arquivo.
Para uma solução mais completa , agora sirva o vídeo com um flash player (ou tela html) e nunca vincule diretamente ao vídeo. Para remover apenas o menu do botão direito, adicione ao seu HTML:
O resultado:
www.foo.com/player.html reproduzirá o vídeo corretamente , mas se você visitar www.foo.com/videos/video.mp4:
Isso funcionará para download direto, cURL, hotlinking, etc.
Esta é uma resposta completa para as duas perguntas feitas e não uma resposta para a pergunta: "posso impedir que um usuário baixe um vídeo que já baixou".
fonte
.htaccess
conteúdoA melhor maneira que eu costumo usar é muito simples, desabilito totalmente o menu de contexto em toda a página, puro html + javascript:
É isso aí! Eu faço isso porque você sempre pode ver a fonte clicando com o botão direito.
Ok, você diz: "Posso usar diretamente a fonte de visualização do navegador" e é verdade, mas começamos pelo fato de que você NÃO PODE parar de baixar
html5
vídeos.fonte
Como desenvolvedor do lado do cliente, recomendo usar o URL de blob, o URL de blob é um URL do lado do cliente que se refere a um objeto binário
em HTML, deixe seu vídeo em
src
branco e, em JS, busque o arquivo de vídeo usando AJAX, verifique se o tipo de resposta é blobNota: Este método não é recomendado para arquivos grandes
EDITAR
Use o bloqueio de origem para evitar o download direto
se o vídeo for entregue por uma API, use um método diferente (PUT / POST) em vez de 'GET'
fonte
O PHP envia a tag de vídeo html5 juntamente com uma sessão em que a chave é uma sequência aleatória e o valor é o nome do arquivo.
Agora, o PHP é solicitado a enviar o vídeo. PHP recupera o nome do arquivo; exclui a sessão e envia o vídeo instantaneamente. Além disso, todos os cabeçalhos 'no cache' e do tipo mime devem estar presentes.
Agora, se o usuário copiar o URL em uma nova guia ou usar o menu de contexto, ele não terá sorte.
fonte
Você pode pelo menos impedir que as pessoas mais experientes em tecnologia não usem o menu de contexto do botão direito do mouse para baixar seu vídeo. Você pode desativar o menu de contexto para qualquer elemento usando o atributo oncontextmenu.
Isso funciona para o elemento body (página inteira) ou apenas para um único vídeo usando-o dentro da tag video.
fonte
Acabamos usando o AWS CloudFront com URLs expirados. O vídeo será carregado, mas quando o usuário clicar com o botão direito do mouse e escolher Salvar Como o URL do vídeo recebido inicialmente expirou. Faça uma pesquisa pela identidade de acesso de origem do CloudFront.
A produção do URL do vídeo requer um par de chaves que pode ser criado na CLI da AWS. Para sua informação, este não é o meu código, mas funciona muito bem!
fonte
Poderíamos tornar isso não tão fácil, ocultando o menu de contexto, assim:
fonte
+1 de maneira simples e em vários navegadores: você também pode colocar uma imagem transparente sobre o vídeo com z-index e opacidade em css. Assim, os usuários verão "salvar imagem como" em vez de "salvar vídeo" no menu de contexto.
fonte
o
não funciona mais. O Chrome e o Opera, em junho de 2018, possuem um submenu na linha do tempo para permitir o download direto, para que o usuário não precise clicar com o botão direito do mouse para baixar o vídeo. Curiosamente, o Firefox e o Edge não têm isso ...
fonte
Usando um serviço como o Vimeo: faça login
Vimeo > Goto Video > Settings > Privacy > Mark as Secured
e também selecione domínios incorporados. Depois que os domínios de incorporação são definidos, ele não permitirá que ninguém incorpore ou exiba o vídeo no navegador, a menos que se conecte a partir dos domínios especificados. Portanto, se você possui uma página protegida em seu servidor que carrega o Vimeo player no iframe, isso dificulta a navegação.fonte
Antes de tudo, perceba que é impossível impedir completamente o download de um vídeo, tudo o que você pode fazer é torná-lo mais difícil . Ou seja, você esconde a fonte do vídeo.
Um navegador da Web baixa temporariamente o vídeo em um buffer. Portanto, se você puder impedir o download, também estará impedindo a exibição do vídeo.
Você também deve saber que <1% da população total do mundo será capaz de entender o código fonte, tornando-o bastante seguro de qualquer maneira. Isso não significa que você não deve ocultá-lo também na fonte - você deve .
Você não deve desativar o botão direito e, menos ainda, deve exibir uma mensagem dizendo
"You cannot save this video for copyright reasons. Sorry about that."
. Como sugerido nesta resposta .Isso pode ser muito chato e confuso para o usuário. Além disso; se eles desabilitarem o JavaScript no navegador, eles irão ser capaz de clique direito e salvar de qualquer maneira.
Aqui está um truque CSS que você pode usar:
O CSS não pode ser desativado no navegador, protegendo seu vídeo sem realmente desabilitar o clique com o botão direito. No entanto, um problema é que
controls
também não pode ser ativado, ou seja, eles devem ser definidos comofalse
. Se você pretende implantar sua própria função Reproduzir / Pausar ou usar uma API que possui botões separados para avideo
tag, essa é uma opção viável.controls
também possui um botão de download, portanto, usá-lo também não é uma boa idéia.Aqui está um exemplo do JSFiddle .
Se você deseja desativar o clique direito usando JavaScript, também armazene a fonte do vídeo em JavaScript também. Dessa forma, se o usuário desabilitar o JavaScript (permitindo clicar com o botão direito), o vídeo não será carregado (também ocultará um pouco melhor a fonte de vídeo).
Da resposta TxRegex :
Agora adicione o vídeo via JavaScript:
JSFiddle funcional
Outra maneira de impedir o clique direito envolve o uso da
embed
tag. No entanto, isso não fornece os controles para executar o vídeo; portanto, eles precisam ser incluídos no JavaScript:fonte
pointer-events: none;
bem, você não pode protegê-lo 100%, mas pode torná-lo mais difícil. esses métodos que estou explicando, eu os enfrentei durante o estudo de métodos de proteção no PluralSight e BestDotNetTraining . no entanto, nenhum desses métodos me impediu de baixar o que eu quero, mas tive dificuldade em selecionar o downloader para passar sua proteção.
Além de outros métodos mencionados para desativar o menu de contexto. o usuário ainda pode usar ferramentas de terceiros, como o InternetDownload manager ou outro software similar para baixar os vídeos. o método de proteção que estou explicando aqui é mitigar esses softwares de terceiros.
o requisito de todos esses métodos é bloquear um usuário quando você identifica que alguém está baixando seus vídeos. dessa forma, eles podem baixar apenas um ou dois vídeos antes de você os proibir de acessar o seu site.
aviso Legal
Não assumirei nenhuma responsabilidade se alguém abusar desses métodos ou usá-los para prejudicar outras pessoas ou os sites que mencionei como exemplo. é apenas para compartilhar conhecimento e ajudá-lo a proteger seu produto intelectual.
gerar links com uma expiração
o requisito para isso é criar um link de download por usuário. esse pode ser facilmente manipulado pelo armazenamento de blues azuis ou pelo amazon s3. você pode criar um link de download com o dobro do carimbo de data e hora de duração do vídeo. é necessário capturar o link do vídeo e a hora solicitada. isso é necessário para o próximo método. O problema desse método é que você está gerando o link de download quando o usuário clica no botão play.
no evento botão de reprodução, você enviará uma solicitação ao servidor, obterá o link e atualizará a fonte.
acelerar a taxa de solicitação de vídeo
então você monitora a rapidez com que o usuário solicita o segundo vídeo. se o usuário solicitar um link para download muito rápido, você os bloqueará imediatamente. você não pode colocar esse limite muito alto porque pode bloquear por engano os usuários que estão apenas navegando ou percorrendo os vídeos.
Ativar intervalo HTTP
use alguma biblioteca js como videojs para reproduzir seu vídeo, também é necessário retornar um AcceptRange no seu cabeçalho. O armazenamento de blobs do Azure oferece suporte a isso imediatamente. Dessa forma, o navegador começa a baixar o pedaço de vídeo por pedaço. geralmente, 32 bytes por 32 bytes. é necessário ouvir as
timeupdate
alterações nos videojs e atualizar seu servidor sobre a porcentagem de exibição do vídeo. a porcentagem de exibição do vídeo não pode ser maior que a porcentagem de exibição do vídeo. e se você estiver entregando um conteúdo de vídeo sem receber nenhuma alteração percentual, poderá bloquear o usuário. porque com certeza eles estão baixando.implementar isso é complicado porque o usuário pode pular o vídeo para frente ou para trás; portanto, esteja ciente disso quando você estiver implementando isso.
é assim que BestDotnetTraining está lidando com o
timeupdate
de qualquer maneira, o usuário pode contornar isso usando algum método de download que baixa um arquivo por meio de streaming. quase c # faça isso imediatamente e, para o nodejs, você pode usar o
request
módulo então você precisa iniciar um stopWatch, ouvir um pacote recebido e comparar o total de bytes recebidos e o tamanho total. Dessa forma, você pode calcular uma porcentagem e o tempo gasto para obter essa porcentagem. useThread.Sleep()
ou algo assim para atrasar a quantidade que você precisa esperar para assistir ao vídeo normalmente. também antes do sono, o usuário pode ligar para o servidor e atualizar a porcentagem recebida. para que o servidor pense que o usuário está realmente assistindo a um vídeo.o cálculo será algo como isto, por exemplo, se você calcular que recebeu 1% até agora, poderá calcular o valor que deve esperar para suspender o encadeamento de download. dessa maneira, você não pode baixar um vídeo mais rapidamente do que a duração real. se um vídeo tiver 24 minutos. leva 24 minutos para fazer o download. (mais o limite que colocamos no primeiro método)
verifique o agente do navegador
ao exibir uma página da web e exibir o link do vídeo ou aceitar a solicitação de atualização de progresso, você pode consultar o agente do navegador. se for diferente, banir o usuário.
esteja ciente de que algum navegador antigo não passa essas informações. portanto, você deve ignorá-lo quando não houver um agente do navegador na solicitação de vídeo e na página da web. mas se um pedido o tiver e outro não, você deverá banir o usuário.
Para contornar isso, o usuário pode definir o cabeçalho do agente do navegador manualmente, igual ao navegador sem cabeçalho usado para capturar o link de download.
verifique o cabeçalho do referenciador
quando o referenciador é algo diferente do URL do host ou do URL da página em que você está veiculando o vídeo, você pode banir o usuário, porque eles colocam o link de download em outra guia ou outro aplicativo. até você pode fazer isso para a solicitação de atualização de progresso.
o requisito para isso é ter um mapeamento de vídeo e a página que mostra esse vídeo. você pode criar alguma convenção ou padrão para entender qual deve ser o URL. Depende do seu design.
Para contornar isso, o usuário pode definir o cabeçalho do referenciador manualmente como o URL da página de download ao baixar os vídeos.
Calcular o tempo entre a solicitação
se você receber tantas solicitações que o tempo entre elas é o mesmo, deverá bloquear o usuário. você deve colocar isso para capturar quanto tempo demora entre a solicitação de geração do link do vídeo. se eles são os mesmos (mais / menos algum limite) e isso acontece várias vezes, você pode banir o usuário. porque se houver um bot que rastreie seu site ou vídeos, geralmente eles terão o mesmo tempo de sono entre a solicitação. portanto, se você receber cada solicitação, por exemplo, a cada 1,3 (mais / min. algum desvio) minutos. então você dispara um alarme. para isso, você pode usar algum cálculo estatístico para saber o desvio entre as solicitações.
Para contornar isso, o usuário pode colocar um tempo de suspensão aleatório entre as solicitações.
Código de amostra
Eu tenho um repositório PluralSight-Downloader que está fazendo isso no meio do caminho. Eu criei este repositório há quase 5 anos. como eu o escrevi apenas para fins de estudo e uso pessoal, o repositório ainda não recebeu nenhuma atualização e não vou atualizar nem facilitar o trabalho. é apenas um exemplo de como isso pode ser feito.
fonte
Você pode usar
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/controlsList
Isso não impede que o vídeo seja salvo, mas remove o botão de download e a opção "Salvar como" no menu de contexto.
fonte
Resposta curta: Criptografe o link como o youtube, não sei como perguntar ao youtube / google como eles o fazem. (Apenas no caso de você querer ir direto ao assunto.)
Gostaria de salientar a qualquer um que isso é possível porque o YouTube faz isso e, se puderem, pode qualquer outro site e não é do navegador, porque eu o testei em alguns navegadores, como o Microsoft Edge e o Internet Explorer e então existe uma maneira de desativá-lo e visto que as pessoas ainda o dizem ... Eu tento procurar uma resposta, porque se o youtube puder, deve haver um caminho e a única maneira de ver como eles o fazem é se alguém investigar os scripts do youtube que estou fazendo agora. Também verifiquei para ver se era um menu de contexto personalizado também e não é porque o menu de contexto está sobrecarregando o elemento inspecionar, quero dizer, está sobre ele e olhei e ele nunca cria uma nova classe e também é impossível acessar o elemento inspecionar com javascript, portanto não pode ser. Você pode dizer quando ele clica duas vezes com o botão direito do mouse em um vídeo do youtube que exibe o menu de contexto do chrome. Além disso ... o youtube não adicionaria essa função. Estou pesquisando e pesquisando a fonte do youtube, então voltarei se encontrar a resposta ... se alguém disser que você não pode, então eles não fizeram ' não pesquise como eu. A única maneira de baixar vídeos do youtube é através de um download de vídeo.
Ok ... eu pesquisei e minha pesquisa permanece que você pode desativá-lo, exceto que não há javascript nele ... você deve ser capaz de criptografar os links para o vídeo para que você possa desativá-lo, porque acho que qualquer o navegador não mostrará se não conseguir encontrá-lo e quando abri um link de vídeo do youtube, ele apareceu como este "blob: https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"sem aspas, para criptografá-lo, para que não possa ser salvo ... você precisa conhecer o php para isso, mas, como a resposta que você escolheu para dificultar o processo, o youtube o torna o mais difícil de criptografar pesado, você precisa ser um programador avançado de php, mas se você não souber disso, considere a pessoa que você escolheu como a melhor resposta para dificultar o download ... mas se você conhece o php do que pesado criptografar o link do vídeo, ele só poderá ser lido em o seu ... Eu não sei como explicar como eles fazem isso, mas eles fizeram e existe uma maneira.A maneira como o YouTube criptografa os vídeos é bastante inteligente, então se você quiser saber como, basta perguntar ao youtube / google como eles fazem isso ... espero que isso ajude você, embora você já tenha escolhido a melhor resposta.Então, criptografar o link é melhor em termos curtos.
fonte
Parece que transmitir o vídeo através do websocket é uma opção viável, como transmitir os quadros e desenhá-los em uma espécie de tela.
Transmissão de vídeo em soquetes da Web usando JavaScript
Eu acho que isso forneceria outro nível de proteção, tornando mais difícil para o cliente adquirir o vídeo e, é claro, resolver seu problema com "Salvar vídeo como ...", clique com o botão direito do mouse na opção do menu de contexto (exagero?!).
fonte
Aqui está o que eu fiz:
fonte
@ Clayton-Graul tinha o que estava procurando, exceto que eu precisava da versão CoffeeScript para um site usando AngularJS. Apenas no caso de você precisar disso, aqui está o que você coloca no controlador AngularJS em questão:
"coisas estranhas estão acontecendo no círculo k" (é verdade)
fonte