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:
- 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.
- 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.
- 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
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
Thank you very much
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 >:(
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] Do đó nếu là "chôm" thì chắc là tôi tự chôm của mình
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ớ