글쎄, 당신은 그것을 100 % 보호 할 수는 없지만 더 어렵게 만들 수 있습니다. 내가 설명하는이 방법들은 PluralSight 및 BestDotNetTraining 에서 보호 방법을 연구하는 동안 직면했습니다 . 그럼에도 불구하고,이 방법들 중 어느 것도 내가 원하는 것을 다운로드하는 것을 막지 못했지만, 다운로더를 보호하기 위해 큐레이터를 다루는 데 어려움을 겪었습니다.
상황에 맞는 메뉴를 비활성화하는 다른 언급 된 방법 외에도. 사용자는 여전히 InternetDownload 관리자 또는 기타 유사한 소프트웨어와 같은 타사 도구를 사용하여 비디오를 다운로드 할 수 있습니다. 여기서 설명하는 보호 방법은 타사 소프트웨어를 완화하는 것입니다.
이러한 모든 방법의 요구 사항은 누군가가 비디오를 다운로드하고 있음을 식별 할 때 사용자를 차단하는 것입니다. 이러한 방식으로 웹 사이트에 대한 액세스를 금지하기 전에 하나 또는 두 개의 비디오 만 다운로드 할 수 있습니다.
부인 성명
누군가가 이러한 방법을 악용하거나 다른 사람이나 예를 들어 언급 한 웹 사이트에 해를 입히는 데 책임을지지 않습니다. 지적 제품을 보호 할 수 있도록 지식을 공유하기위한 것입니다.
만료 된 링크를 생성
이를 위해서는 사용자 당 다운로드 링크를 작성해야합니다. azure blob storage 또는 amazon s3으로 쉽게 처리 할 수 있습니다. 비디오 길이 만료 타임 스탬프의 두 배로 다운로드 링크를 만들 수 있습니다. 그런 다음 해당 비디오 링크와 요청 된 시간을 캡처해야합니다. 이것은 다음 방법에 필요합니다. 이 방법은 사용자가 재생 버튼을 클릭 할 때 다운로드 링크를 생성하는 것입니다.
재생 버튼 이벤트시 서버에 요청을 보내고 링크를 가져 와서 소스를 업데이트하십시오.
비디오 요청 속도 조절
그런 다음 두 번째 비디오에 대한 사용자 요청 속도를 모니터링합니다. 사용자가 다운로드 링크를 너무 빨리 요청하면 즉시 차단합니다. 비디오를 탐색하거나 훑어 보는 사용자를 실수로 차단할 수 있기 때문에이 임계 값을 너무 크게 설정할 수 없습니다.
HTTP 범위 활성화
videojs 와 같은 js 라이브러리를 사용 하여 비디오를 재생하고 헤더에 AcceptRange를 반환해야합니다. Azure Blob Storage는 기본적으로이를 지원합니다. 이런 식으로 브라우저는 청크별로 비디오 청크를 다운로드하기 시작합니다. 일반적으로 32 바이트 x 32 바이트입니다. 그런 다음 videojs timeupdate
변경 사항 을 듣고 비디오를 시청 한 비율에 대해 서버를 업데이트해야합니다. 동영상 시청 비율은 동영상 게재 비율을 초과 할 수 없습니다. 비율 변경없이 동영상 콘텐츠를 제공하는 경우 사용자를 차단할 수 있습니다. 그들이 다운로드하고 있기 때문에.
사용자가 비디오를 앞뒤로 건너 뛸 수 있으므로이를 구현할 때 이에주의해야합니다.
이것이 BestDotnetTraining이 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);
}
});
}
});
어쨌든 사용자는 스트리밍을 통해 파일을 다운로드하는 일부 다운로드 방법을 사용하여이 문제를 해결할 수 있습니다. 거의 C #은 즉시 사용 가능하며 nodejs의 경우 request
모듈 을 사용할 수 있습니다 . 그런 다음 stopWatch를 시작하고 수신 된 패키지를 듣고 수신 된 총 바이트를 총 크기와 비교해야합니다. 이 방법으로 백분율과 백분율을 얻는 데 소요 된 시간을 계산할 수 있습니다. 그런 다음 Thread.Sleep()
또는 이와 유사한 것을 사용하여 비디오를 정상적으로 볼 때 기다려야하는 양을 스레드를 지연시킵니다. 또한 휴면 전에 사용자는 서버를 호출하고 수신 비율을 업데이트 할 수 있습니다. 서버는 사용자가 실제로 비디오를보고 있다고 생각합니다.
계산은 다음과 같습니다. 예를 들어 지금까지 1 %를 받았다고 계산하면 다운로드 스레드를 잠자기 위해 대기해야하는 양을 계산할 수 있습니다. 이런 식으로 실제 길이보다 빨리 비디오를 다운로드 할 수 없습니다. 동영상이 24 분인 경우 다운로드하는 데 24 분이 걸립니다. (그리고 첫 번째 방법에 넣은 임계 값)
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
브라우저 에이전트를 확인하십시오
웹 페이지를 제공하고 비디오 링크를 제공하거나 진행 업데이트 요청을 수락하면 브라우저 에이전트를 볼 수 있습니다. 다른 경우 사용자를 금지하십시오.
일부 구형 브라우저는이 정보를 전달하지 않습니다. 따라서 비디오 요청과 웹 페이지 요청 모두에 브라우저 에이전트가없는 경우이를 무시해야합니다. 그러나 한 요청에는 요청이 있고 다른 요청에는 그렇지 않은 경우 사용자를 금지해야합니다.
이 문제를 해결하기 위해 사용자는 다운로드 링크를 캡처하는 데 사용하는 헤드리스 브라우저와 동일한 브라우저 에이전트 헤더를 수동으로 설정할 수 있습니다.
참조 헤더를 확인하십시오
리퍼러가 비디오를 제공하는 호스트 URL 또는 페이지 URL 이외의 것이면 사용자가 다운로드 링크를 다른 탭이나 다른 응용 프로그램에 넣기 때문에 사용자를 차단할 수 있습니다. 진행 업데이트 요청에 대해서도 그렇게 할 수 있습니다.
이를 위해서는 비디오와 해당 비디오를 보여주는 페이지를 매핑해야합니다. URL이 무엇인지 이해하기 위해 몇 가지 규칙이나 패턴을 만들 수 있으며 디자인에 달려 있습니다.
이 문제를 해결하기 위해 사용자는 비디오를 다운로드 할 때 참조 페이지 헤더와 수동으로 참조 페이지 헤더를 설정할 수 있습니다.
요청 사이의 시간을 계산
요청 간 시간이 동일한 요청을 너무 많이받는 경우 사용자를 차단해야합니다. 비디오 링크 생성 요청 사이의 시간을 캡처하려면이 값을 넣어야합니다. 이들이 동일하고 (임계의 플러스 / 빼기) 여러 번 이상 발생하면 사용자를 차단할 수 있습니다. 웹 사이트 나 동영상을 크롤링 할 봇이있는 경우 일반적으로 요청간에 동일한 휴면 시간을 갖기 때문입니다. 예를 들어 1.3 (플러스 / 분 약간의 편차) 분마다 각 요청을받는 경우 그런 다음 알람을 발생시킵니다. 이를 위해 통계 계산을 사용하여 요청 간의 편차를 알 수 있습니다.
이 문제를 해결하기 위해 사용자는 요청간에 임의의 휴면 시간을 둘 수 있습니다.
샘플 코드
나는 반쯤하는 reural PluralSight-Downloader 를 가지고 있습니다. 나는이 레포를 거의 5 년 전에 만들었습니다. 내가 연구 목적으로 쓰고 개인적인 용도로만 사용했기 때문에, repo는 지금까지 어떤 업데이트도받지 않았으며, 업데이트하거나 작업하기 쉽게 만들지 않을 것입니다. 그것은 어떻게 할 수 있는지에 대한 예일뿐입니다.