PDA

View Full Version : Cách bảo vệ băng thông của bạn trong PHP !



ITbaby
03-03-2004, 03:20
Bảo vệ băng thông của bạn trong PHP
Đánh cắp băng thông là một vấn đề khó chịu với nhiều webmaster. Nếu bạn có một hình trên site của bạn, bất cứ ai cũng có thể đặt hình đó trên site của họ bằng một đường link đến hình đó trong site của bạn, làm nó như trên site của họ. Bằng cách đó họ đã ăn cắp băng thông của bạn. Băng thông của bạn bị đánh cắp mà bạn không được hưởng một tý quyền lợi nào cả.
Apache có giải pháp cho vấn đề này sử dụng mod_rewrite. Đầu tiên đặt một hình vào trong một thư mục, không một ai có thể vào được từ một web browser. Ý tưởng là nên đặt ở ngoài thư mục gốc của website, nếu không thể làm được như vậy, bạn có thể đặt trong một thư mục trong webroot và đặt một tập tin .htaccess trong đó, có nội dung như sau:
<Limit>
order deny,allow
deny from all
</Limit>
Bây giờ dùng một php script để kết nối đến tập tin
<?php

// image.php
// <img src=``image.php?filename=pinkgoblin.gif``>
session_start();
$path=``./images/``; // Đường dẫn đến thư mục bảo vệ của bạn
$mimetype=``image/gif``; // Loại tập tin
if ( $_SESSION[``ticket``] == ``admitone`` ) {
Header(``Content-type: ``);
readfile ( $path . $filename );
}
?>
Chúng ta dùng dùng session của PHP để bảo vệ file. Đoạn script sẽ chỉ hiển thị file nếu $_SESSION[``ticket``] được set ``admitone`` (Nếu bạn sử dụng PHP < 4.1.0 bạn có thể sử dụng $HTTP_SESSION_VARS[``ticket``])
Bây giờ trong trang ta muốn hình ảnh được hiển thị, đầu tiên chúng ta đăng ký giá trị session $ticket trước khi hiển thị hình
<?php
session_start();
$ticket = ``admitone``;
session_register($_SESSION[``ticket``]);
?>
<!DOCTYPE HTML PUBLIC ``-//W3C//DTD HTML 4.0 Transitional//EN``>
<html>
<head>
<title>Bandwidth Protected</title>
</head>
<body>
<p>This image has been protected.</p>
<img src=``image.php?filename=pinkgoblin.gif``>
</body>
</html>
Bạn có thể sử dung cho tất cả các loại tập tin.

cái này copyleft trên mạng đó :lick: :lick:

BnoL
03-03-2004, 04:59
+ Wow. hay ghê, đúng là cái mà mình đang cần đó. thanks.
+ Cho hỏi cái dấu `` có phải là " không vậy?

$mimetype=``image/gif``; // Loại tập tin
Nếu mình muốn thêm nhiều loại tập tin thì sao ? :)
thanks

normal
03-03-2004, 05:17
code này có ích thật!!, ITbaby lụm ở đâu hay ghê !, dấu `` là " xiền luôn !!!!!!!!!!!

ITbaby
03-03-2004, 05:35
cái này copyleft trên mạng đó :lick: :lick:
Câu trả lời nà ! câu trả lời nà :lick: :lick:

Terry
04-03-2004, 17:41
Bạn có thể tìm hiiểu chi tiết và rất nhiều tutorial về php trên www.sitepoint.com
Bài về mod_rewrite trong sitepoint khá chi tiết và hay đó.

QueenRock
09-03-2004, 16:12
hỏi nè, nếu tớ dùng đường dẫn kiểu <img src="h**p://chom_chia_image.com/image.php?filename=pinkgoblin.gif"> thì có được không :D

ITbaby
11-03-2004, 18:26
Thêm 1 cái nữa nà ! Em hông có biết gì về Web hít, vì thế không có thể trả lời cho các anh được, các anh thông cảm. Ai đã mò qua mấy cái này thì giúp đỡ cho pà con đi chứ. Nội dung cái bài đó đây nè :

Cách đây khá lâu, trong một dịp tình cờ mình được xem một bài viết khá hay giải thích 20 lý do vì sao ta không nên load ảnh trực tiếp từ website của người khác và mình cũng đã xin phép được dịch lại để trình bày với các bạn rồi. Tiếc là từ đó đến nay, tình trạng trên vẫn không hề có chiều hướng suy giảm, trái lại càng trầm trọng hơn. Thậm chí vừa rồi mình chợt phát hiện ra, chính bản thân mình cũng là một nạn nhân trong số đó. Buồn chăng? Giận chăng? Hay tìm cách trả đũa? Chẳng ích gì!

Trên tinh thần chia sẻ, mình viết bài này với hy vọng có thể giúp các bạn đang là nạn nhân bất đắc dĩ của tình trạng hot-linking, trộm bandwidth bất hợp pháp, phải trả tiền mua đồ cho người khác dùng mà thậm chí không hề hay biết.

Vấn đề của chúng ta ở đây là gì? Khi bạn đăng ký host website ở một nơi nào đó, thường nhà cung cấp dịch vụ chỉ cho bạn một lượng dữ liệu luân chuyển (data transfer) nhất định hàng tháng (Nếu có nơi nào ghi unlimited bandwidth thì... họ xạo đó! Lý do). Và khi bạn sử dụng hết lượng dữ liệu này, website của bạn sẽ tự động bị đóng cửa. Bạn sẽ phải trả phí re-active và phí extra bandwidth để mở cửa lại website của mình hoặc phải buộc lòng chờ đến tháng tiếp theo.

Khi hot-link hình ảnh, dữ liệu... trên web của bạn, các website trộm cắp kia đã làm cho lượng data transfer của bạn tăng lên. Cũng có nghĩa là bạn phải trả tiền vô duyên cho cái mà bạn không hề sử dụng.

Thôi đừng nói nhảm nữa! Bắt đầu đi nào!!
Vâng! Mời bạn khởi động Notepad và chúng ta bắt đầu lập trình nào.

<?
$extension = substr($path, -3);
if($extension == "jpg") {
header("Content-type: image/jpeg");
} elseif ($extension == "gif") {
header("Content-type: image/gif");
}
readfile("$path");
?>

Đoạn mã trên có nghĩa đơn giản là khi đọc tên file, chương trình sẽ lùi lại 3 ký tự. Nếu 3 ký tự đó là jpg thì đó là ảnh JPEG và nếu 3 ký tự đó là gif thì đương nhiên đó là ảnh GIF. (Bạn có thể mở rộng đoạn mã trên nếu website của bạn có ảnh PNG, BMP...)

Lưu file với tên nào đó mà bạn thích như loadimage.php chẳng hạn và upload lên server là xong. Sau này, khi cần hiển thị ảnh, bạn chỉ việc gọi file ảnh với lệnh

loadimage.php?path=/server/path/anyimage.ext

Ví dụ: <img src='loadimage.php?path=/home/my_site/htdocs/image/mylogo.gif'>

. . .
. . . . .

Hì! Bạn có thấy một lỗi bảo mật ở đây không? Chính là nó! Nếu gọi ảnh bằng lệnh nêu trên, bất kỳ ai cũng biết được server path của bạn. Thế thì tiêu đời rồi còn gì! Cho nên, hãy cố gắng thêm chút nữa nào bạn. Giấu server path của ta đi.

<?
$base_path = "/home/my_site/htdocs/";
$path = $base_path.$path;
$extension = substr($path, -3);
if($extension == "jpg") {
header("Content-type: image/jpeg");
} elseif ($extension == "gif") {
header("Content-type: image/gif");
}
readfile("$path");
?>

Và ta sẽ nạp hình ảnh như sau

loadimage.php?path=/image/mylogo.gif

Giờ thì bạn đã có thể xoa tay hài lòng là sẽ chẳng còn ai hot-link được hình ảnh của bạn từ website của họ nữa trừ khi họ có... 72 phép biến hóa như Tôn Ngộ Không

Lưu ý

Mã lệnh chúng ta viết nãy giờ chỉ có tác dụng che giấu địa chỉ thực của hình ảnh và chống hot-link. Tuy nhiên, nếu website kẻ trộm kia biết được đường dẫn thực trên server của bạn, họ vẫn có thể chôm được hình trực tiếp qua URL như sau:

<img src='http://website_cua_ban/image/mylogo.gif'>

Vì thế, để giải quyết luôn trường hợp này, hãy lưu hình ảnh của bạn bên ngoài các thư mục có thể truy cập qua web. Như trong ví dụ của chúng ta, bạn có thể lưu hình ảnh tại /home/my_site/private_dir/ thay vì trong thư mục /htdocs/

bản quyền lehoang

Được lụm từ link http://www.vntoday.com.vn/forum/index.php?showtopic=2238 he he he. Tks brồ

mIn hEe
13-03-2004, 15:30
Nhưng tớ đang dùng 1 cái album nhạc bằng 4image, đã ai edit đc code ko lấy đc link nhạc của ta ko ???, ví dụ như link nhạc của ta đc đánh số id 1.2.3 để ko bị mất bandwidth, chứ view ra vẫn nhòm dc link thì mình vẫn mất bandwidth.

Tớ gà quá đọc bài của ITbaby mà trả hiểu gì cả :(