09/10/2018, 18:14

chỉ giúp tôi cách thức bảo mật cho website

các bạn hãy chỉ giúp tôi cách thức bảo mật cho website mà bạn đang sử dụng về: hình ảnh, bandwidth, database....
mình nghĩ các bạn sẽ có nhiều cách khác nhau, chúng ta có thể học hỏi lẫn nhau để ngày càng chuyên nghiệp hơn
hanavncom viết 20:26 ngày 09/10/2018
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.

PHP Code:
<? 
$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

PHP Code:
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.

PHP Code:
<? 
$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

PHP Code:
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:

PHP Code:
<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/

Sưu tầm, bản quyền lehoang
thangkho_it viết 20:20 ngày 09/10/2018
Mình thấy một số web ...save as...không được, nó chỉ hiện một trang rỗng không có nội dung gì cả, mình dùng thử teleport (down toàn bộ web) cũng không si nhê vậy là sao họ dùng phương pháp gì vậy
hanavncom viết 20:27 ngày 09/10/2018
Dùng TAG <frameset> trong HTML hoặc có thể sử dụng 1 đoạn scripts để chống save as..

PHP Code:
<script language="Javascript1.2"
msg "Welcome to CMOL!"
bV parseInt(navigator.appVersion
bNS navigator.appName=="Netscape" 
bIE navigator.appName=="Microsoft Internet Explorer" 

function nrc(e) { 
if (
bNS && e.which 1){ 
alert(am
return 
false 
} else if (bIE && (event.button >1)) { 
alert(msg
return 
false



document.onmousedown nrc
if (
document.layerswindow.captureEvents(Event.MOUSEDOWN); 
if (
bNS && bV<5window.onmousedown nrc

</script> 
__
xacuop viết 20:19 ngày 09/10/2018
Bạn cho VD với <frameset> xem sao. Script trên chỉ chặn sự kiện mouseclick thôi. vô File/Save As vẫn được
nhungvisaodauyeu viết 20:18 ngày 09/10/2018
Có một điều quan trọng nhất để Code trên không thực thi được: Đa số các trang web PHP là các diễn đàn, việc gọi hình ảnh là tự động, vd: Smilies, Menu Images...Chỉ trừ trường hợp là Website cá nhân hoặc 1 site Tập thể tự lập trình thì mới tùy biến được
xacuop viết 20:17 ngày 09/10/2018
Quote Được gửi bởi nhungvisaodauyeu
Có một điều quan trọng nhất để Code trên không thực thi được: Đa số các trang web PHP là các diễn đàn, việc gọi hình ảnh là tự động, vd: Smilies, Menu Images...Chỉ trừ trường hợp là Website cá nhân hoặc 1 site Tập thể tự lập trình thì mới tùy biến được
Sao lại ko? Mở source code ra mà thêm vào.
thangkho_it viết 20:26 ngày 09/10/2018
mình nghe nói Mysql có nhiều lỗ hổng, bạn nào biết chỉ với, chỉ cách khắc phục luôn nhé.
bpmtri viết 20:16 ngày 09/10/2018
Quote Được gửi bởi hanavncom
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.

PHP Code:
<? 
$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

PHP Code:
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.

PHP Code:
<? 
$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

PHP Code:
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:

PHP Code:
<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/

Sưu tầm, bản quyền lehoang

Cách của bạn vẫn không chống được ăn cắp Bandwidth, ví dụ, trong site của tôi có đặt link đến hình của bạn như sau:

Code:
<img src="http://www.yourwebsite.com/loadimage.php?path=/image/mylogo.gif" ...>
Bạn thấy thế nào?
Bài liên quan
0