Hiện nay nhiều bạn có làm những nhạc nghe nhạc trực tuyến. Đây là hình thức giải trí rất hay, nhưng ai cũng đang đau khổ trước tình trạng link nhạc của mình bị lấy đem đi nơi khác, nhìn bandwidth tăng vùn vụt mà xót tiền.

Bài viết này trình bày một phương pháp đơn giản để bảo vệ nhạc/phim cho bạn. Cách thức này chỉ áp dụng nếu host chứa nhạc là của bạn (nếu bạn lấy địa chỉ nhạc của người khác rồi chống không cho người khác nữa lấy lại thì bó tay). Bài viết này tôi thực hiện vào năm 2004, sẽ từ từ sửa lại theo tình hình thực tế.

Phương pháp phổ biến nhất để chống việc đem liên kết đi nơi khác là dùng thông tin về HTTP_REFERER để điều khiển, tuy nhiên chương trình nghe nhạc của Windows (WMP) không hỗ trợ cái này, nên đối với nhạc phim thì không thể dùng cách thông thường như bảo vệ liên kết nóng (hotlink) cho ảnh được. Một số giải pháp thay thế được đề nghị (xin các bạn bổ sung thêm):

  • Dùng cron để đổi địa chỉ nhạc ở B một cách định kì, và ở A bạn biết quy luật đó nên bất cứ lúc nào bạn vẫn tìm ra địa chỉ chính xác khi có người muốn nghe nhạc. Cách này phải chỉnh sửa script nhạc, đồng thời tính di chuyển thấp (không "chia xẻ" cho host khác được).
  • Đọc trực tiếp từ B về A rồi chuyển đến người dùng. Cách A không tốn dung lượng đĩa ở A nhưng lại tốn bandwidth khủng khiếp.

Dưới đây là phương pháp tinh vi hơn. Bạn thậm chí có thể giới hạn những trang web nào được phép liên kết dến để nghe nhạc

Giả sử trang web của bạn chạy ở máy chủ A, còn nhạc bạn để ở máy chủ B (nếu cả 2 để cùng một chỗ thì chỉ là 1 trường hợp đặc biệt, và vẫn áp dụng bình thường). Địa chỉ "chính thức" để nghe nhạc vẫn đặt tại A (để sau này bạn có chuyển host nhạc cũng đỡ mất công sửa lại) nhưng luôn luôn hướng đến nhạc ở host B. Cách làm như sau: khi ai đó muốn nghe 1 bài hát, ở A bạn sẽ cấp quyền bằng cách "đi cửa sau" để nói trước rằng "có 1 người đặc điểm thế này, thế này... đến nghe nhạc". Sau đó, khi người này vào nghe, do đã được thông báo trước, A kiểm tra và thấy ổn liền chuyển người nghe đến một địa chỉ khác ở B. Vì địa chỉ ở B không cố định nên không ai có thể lấy link được.

Hãy xem sơ đồ dưới đây


Tiếp theo là cách làm cụ thể tiến hành ở 2 nơi

1. Ở máy chủ chính (A)

Ở mỗi trang nghe nhạc, bạn link đến một tập tin hình ảnh đặc biệt (thực chất là script PHP) có nhiệm vụ kiểm tra và cấp phép nghe nhạc. Trong cái script đó làm công việc sau:

  1. Kiểm tra xem ảnh đó có phải được gọi từ một trang được phép nghe nhạc hay không. Với PHP bạn dùng biến $_SERVER['HTTP_REFERER'] để kiểm tra.
  2. Nếu không đúng thì mặc kệ còn nếu đúng thì bạn ghi địa chỉ IP của người đó vào một danh sách cấp phép, và đặt số lần được nghe là 3.
  3. Trong cả 2 trường hợp trên, bạn đều redirect về ảnh thật cho nó có vẻ "hợp lệ" một chút
Bạn phải đặt số lần được nghe là 3 (thậm chí đặt là 5 cũng được, miễn đừng đặt là 100 ) vì một số trình duyệt đọc file của bạn nhiều lần (cụ thể khi tôi kiểm tra với plug in WMP10, thì Firefox đọc 3 lần (trình duyệt 1 lần, WMP 2 lần) còn IE đọc 2 lần (đều do WMP đọc). 2 lần của WMP thì 1 lần thông thường, 1 lần nữa là kiếm phụ đề kèm theo (.smi)...). Vì vậy cứ đặt 3-5 lần cho chắc ăn, chả chết ai

Sau phần "đi cửa sau" thì đến phần cửa chính. Bạn dùng mod_rewrite của Apache để chuyển tất cả địa chỉ nhạc (địa chỉ ảo, ở A) đến 1 script PHP thứ 2 để kiểm duyệt. Script PHP này (được gọi khi WMP đọc file nhạc) chỉ đơn giản xem IP của bạn có trong danh sách được phép hay không, nếu có và số lần còn được phép lớn hơn 0 thì giảm số lần đi 1 và chuyển đến địa chỉ nhạc ở B, nếu không đúng thì chuyển đến một bài midi nào đó cho vui

Với cái gọi là "danh sách được phép" ở trên, bạn có thể lưu trong tập tin văn bản thông thường, và dùng các hàm serialize()/unserialize() cho tiện. Nếu là PHP5 thì bạn có thể dùng SQLite cũng rất tốt.

2. Ở máy chủ nhạc (B)

Ở B, bạn có 3 giải pháp để tạo địa chỉ thay đổi bằng một cronjob:

  • Dùng mod_rewrite để sửa địa chỉ (cron cho PHP tự sửa tập tin .htaccess)
  • Dùng các tập tin symbolic link của Linux để trỏ đến địa chỉ thật (cron cho PHP tự tạo các symlink khác nhau)
  • Đổi tên thư mục định kì

2 cách đầu có 1 ưu điểm: có thể tạo nhiều địa chỉ ảo cho 1 địa chỉ thật (vì sao là ưu điểm thì bạn sẽ biết ngay dưới đây). Tôi sẽ dùng cách 1 vì nó đơn giản nhất (và bởi vì modRewrite is your friend).

Bạn tạo ở B thư mục khongcanbiet (bí mật) và để nhạc trong đó, thư mục này cố định nhưng có trời mới biết được sự tồn tại của nó. Sau đó bạn dùng modRewrite để chuyển các địa chỉ khác về địa chỉ này. "Các địa chỉ khác" ở đây thí dụ như bạn dựa vào thời gian hiện tại:

 md5(gmdate('H j d z', time()+$adjust.'you are stupid'); 

Chuỗi md5 ở trên thay đổi theo ngày/giờ hiện tại, bạn chú ý biến $adjust. Để hoạt động tốt nhất, bạn tạo 3 địa chỉ ảo dụa trên giờ cách đây 1h, giờ hiện tại và giờ sau đó 1h đều trỏ đến tập tin nhạc. Cần làm như vậy vì có thể giờ ở A và B không đồng bộ (chênh nhau vài phút).

Dưới đây là một tập tin .htaccess điển hình ở B:

RewriteEngine On
ErrorDocument 400 http://B/not_found.mid
ErrorDocument 403 http://B/not_found.mid
ErrorDocument 404 http://B/not_found.mid
RewriteRule ^c730dd9effe9bf443ded1bf39270b3a9/(.*)$ khongcanbiet/$1
RewriteRule ^e35e91acba8b14cde08d37577668d41f/(.*)$ khongcanbiet/$1
RewriteRule ^ee0c1fd0f7cd04a7925ca68b50c8016c/(.*)$ khongcanbiet/$1

Phải đặt các ErrorDocument vì nếu không, khi nhập vào địa chỉ sai, thông báo lỗi mặc định của Apache sẽ tiết lộ địa chỉ thật thì toi

Chú ý rằng ở A bạn cũng biết quy tắc đổi tên này, để chuyển hướng (redirect) đến B cho đúng.

Bài viết chấm dứt, rất mong nhận được các góp ý. Chúc bạn thành công!




Bình luận

  • TTCN (3)
Nemo Nguyen  21665

Thank you very much

guest

mẹ , chôm bài từ jcisio mà không ghi copyright

Bố khỉ mấy thằng ranh con, chôm mà không ghi bản quyền >:(

Hải Nam  30903

Tôi là jcisio đây

Chào bạn guest,
jcisio cũng chính là tôi, [url=http://jcisio.com/misc]Hải Nam[/url] Big Grin Do đó nếu là "chôm" thì chắc là tôi tự chôm của mình Wink
Rất vui vì một bài viết cách đây từ rất lâu mà vẫn còn người nhớ Smile