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
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);
}
});
}
});
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. use Thread.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)
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
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.