tốt, bạn không thể bảo vệ nó 100% nhưng bạn có thể làm cho nó khó hơn. những phương pháp mà tôi đang giải thích, tôi đã đối mặt với chúng trong quá trình nghiên cứu các phương pháp bảo vệ trong PluralSight và BestDotNetTraining . tuy nhiên, không có phương pháp nào trong số này ngăn tôi tải xuống những gì tôi muốn, nhưng tôi đã có một thời gian khó khăn để quản lý trình tải xuống để vượt qua sự bảo vệ của họ.
Ngoài các phương pháp được đề cập khác để vô hiệu hóa menu ngữ cảnh. người dùng vẫn có thể sử dụng các công cụ của bên thứ ba như trình quản lý InternetD Download hoặc phần mềm tương tự khác để tải xuống video. phương pháp bảo vệ mà tôi giải thích ở đây là giảm thiểu các phần mềm bên thứ 3 đó.
yêu cầu của tất cả các phương pháp này là chặn người dùng khi bạn xác định ai đó đang tải xuống video của mình. bằng cách này, họ chỉ có thể tải xuống một hoặc hai video trước khi bạn cấm họ truy cập vào trang web của bạn.
từ chối trách nhiệm
Tôi sẽ không chấp nhận bất kỳ trách nhiệm nào nếu ai đó lạm dụng các phương pháp này hoặc sử dụng nó để gây hại cho người khác hoặc các trang web mà tôi đã đề cập làm ví dụ. nó chỉ để chia sẻ kiến thức để giúp bạn bảo vệ sản phẩm trí tuệ của mình.
tạo liên kết với thời hạn sử dụng
yêu cầu cho việc này là tạo liên kết tải xuống cho mỗi người dùng. người ta có thể dễ dàng xử lý bằng cách lưu trữ blob azure hoặc amazon s3. bạn có thể tạo một liên kết tải xuống với hai lần dấu thời gian hết hạn của video. sau đó bạn cần phải quay liên kết video đó và thời gian được yêu cầu. điều này là cần thiết cho phương pháp tiếp theo. Điều hấp dẫn cho phương pháp này là bạn đang tạo liên kết tải xuống khi người dùng nhấp vào nút phát.
trên sự kiện nút play, bạn sẽ gửi yêu cầu đến máy chủ và nhận liên kết và cập nhật nguồn.
tăng tốc độ yêu cầu video
sau đó bạn theo dõi tốc độ yêu cầu của người dùng cho video thứ hai. nếu người dùng yêu cầu liên kết tải xuống quá nhanh, thì bạn chặn chúng ngay lập tức. bạn không thể đặt ngưỡng này quá lớn vì bạn có thể chặn nhầm người dùng chỉ duyệt hoặc lướt qua các video.
Kích hoạt phạm vi HTTP
sử dụng một số thư viện js như videojs để phát video của bạn, bạn cũng cần phải trả lại AcceptRange trong tiêu đề của mình. Azure blob lưu trữ hỗ trợ này ra khỏi hộp. bằng cách này, trình duyệt bắt đầu tải xuống đoạn video bằng đoạn. thông thường, 32byte bằng 32byte. sau đó bạn cần nghe videojs timeupdate
thay đổi và cập nhật máy chủ của bạn về tỷ lệ phần trăm mà video được xem. tỷ lệ phần trăm mà video được xem không thể nhiều hơn tỷ lệ phần trăm mà video được phân phối. và nếu bạn đang phân phối nội dung video mà không nhận được bất kỳ thay đổi phần trăm nào, thì bạn có thể chặn người dùng. bởi vì chắc chắn họ đang tải xuống
thực hiện điều này là khó khăn vì người dùng có thể bỏ qua video tiến hoặc lùi vì vậy hãy có ý thức về điều này khi bạn đang thực hiện điều này.
đây là cách BestDotnetTraining xử lý 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);
}
});
}
});
dù sao, người dùng có thể giải quyết vấn đề này bằng cách sử dụng một số phương pháp tải xuống để tải xuống tệp thông qua phát trực tuyến. Hầu như c # làm điều đó ra khỏi hộp và đối với nodejs, bạn có thể sử dụng request
mô-đun. sau đó bạn cần bắt đầu một đồng hồ bấm giờ, lắng nghe một gói đã nhận và so sánh tổng số byte nhận được so với tổng kích thước. bằng cách này bạn có thể tính được tỷ lệ phần trăm và thời gian sử dụng để có được tỷ lệ phần trăm đó. sau đó sử dụng Thread.Sleep()
hoặc một cái gì đó tương tự để trì hoãn chuỗi số tiền mà bạn phải chờ nếu bạn xem video bình thường. Ngoài ra trước khi ngủ, người dùng có thể gọi máy chủ và cập nhật tỷ lệ phần trăm nhận được. vì vậy máy chủ nghĩ rằng người dùng thực sự đang xem video.
phép tính sẽ giống như thế này, ví dụ, nếu bạn tính rằng bạn đã nhận được 1 phần trăm cho đến nay, thì bạn có thể tính toán số tiền mà bạn nên đợi để ngủ chuỗi tải xuống. bằng cách này, bạn không thể tải xuống video nhanh hơn thời lượng thực tế. nếu một video là 24 phút. sẽ mất 24 phút để tải xuống. (cộng với ngưỡng chúng tôi đặt trong phương thức đầu tiên)
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
kiểm tra tác nhân trình duyệt
khi bạn đang phục vụ một trang web và phục vụ liên kết video hoặc chấp nhận yêu cầu cập nhật tiến độ, bạn có thể xem tác nhân trình duyệt. Nếu nó khác thì cấm người dùng.
chỉ cần lưu ý rằng một số trình duyệt cũ không vượt qua thông tin này. vì vậy bạn nên bỏ qua điều này khi không có tác nhân trình duyệt trong cả yêu cầu video và yêu cầu trang web. Nhưng nếu một yêu cầu có nó và một yêu cầu khác không có, thì bạn nên cấm người dùng.
để khắc phục điều này, người dùng có thể đặt tiêu đề tác nhân trình duyệt theo cách thủ công giống như trình duyệt không đầu mà họ đang sử dụng để chụp liên kết tải xuống.
kiểm tra tiêu đề người giới thiệu
khi người giới thiệu là một cái gì đó không phải là URL máy chủ của bạn hoặc URL trang mà bạn đang phục vụ video, bạn có thể cấm người dùng, vì họ đặt liên kết tải xuống trong một tab khác hoặc ứng dụng khác. thậm chí bạn có thể làm điều đó cho yêu cầu cập nhật tiến độ.
yêu cầu cho việc này là phải có một bản đồ video và trang hiển thị video đó. bạn có thể tạo một số quy ước hoặc mẫu để hiểu URL nên là gì, tùy thuộc vào thiết kế của bạn.
để khắc phục sự cố, người dùng có thể đặt tiêu đề giới thiệu bằng tay với URL trang tải xuống khi tải xuống video.
Tính thời gian giữa yêu cầu
nếu bạn nhận được rất nhiều yêu cầu mà thời gian giữa chúng là như nhau, thì bạn nên chặn người dùng. bạn nên đặt cái này để nắm bắt bao nhiêu thời gian giữa yêu cầu tạo liên kết video. nếu chúng giống nhau (cộng / trừ một số ngưỡng) và nó xảy ra nhiều hơn một số lần, thì bạn có thể cấm người dùng. bởi vì nếu có một bot sẽ thu thập dữ liệu trang web hoặc video của bạn, thì thông thường họ có cùng thời gian ngủ giữa yêu cầu của họ. vì vậy, nếu bạn nhận được từng yêu cầu, ví dụ, cứ sau 1,3 phút (cộng / phút một số sai lệch). sau đó bạn đưa ra một báo động. để làm điều này, bạn có thể sử dụng một số tính toán thống kê để biết độ lệch giữa các yêu cầu.
để khắc phục điều này, người dùng có thể đặt thời gian ngủ ngẫu nhiên giữa các yêu cầu.
mã mẫu
Tôi có một repo PluralSight-Downloader đang thực hiện nửa chừng. Tôi đã tạo repo này gần 5 năm trước. bởi vì tôi đã viết nó cho mục đích học tập và chỉ sử dụng cá nhân, repo không nhận được bất kỳ cập nhật nào cho đến nay và tôi sẽ không cập nhật hoặc làm cho nó dễ dàng để làm việc với. nó chỉ là một ví dụ về cách nó có thể được thực hiện.