PDA

View Full Version : Ba cách phòng chống DDOS cho trang web của bạn



admin
19-06-2011, 12:02 PM
Tấn công DDOS hay còn được gọi tấn công từ chối dịch vụ đơn giản được hiểu là tạo ra 1 lượt truy cập ảo ồ ạt vào một địa chỉ website tại cùng một thời điểm nào đó đã định sẵn nhằm “đánh sập” máy chủ lưu trữ khiến nó chạy chậm hoặc không thể chạy được nữa. Thật sự thì không có phương pháp chống DDOS hiệu quả nhất nhưng nếu với mức độ nhỏ và mang tính không chuyên khi sử dụng các phần mềm được lập trình sẵn ở quy mô nhỏ lẻ thì ta hoàn toàn có thể chủ động phòng chống.

Cách 1: Chống iframe.

Đây là phương pháp được xem là thô sơ nhất. Kẻ tấn công sẽ mượn 1 website có lượt truy cập lớn nào đó chèn các iframe hướng về website cần đánh rồi cho chạy lệnh refresh (tải lại) nhiều lần hoặc họ viết sẵn 1 tập tin flash với công dụng tương tự rồi đặt lên website và khi người dùng truy cập vào website này thì họ vô tình bất đắc dĩ trở thành người tấn công website kia.

Với hình thức tấn công kiểu như thế này bạn hoàn toàn có thể chống lại bằng cách chèn 1 đoạn mã Javascript chống chèn iframe từ các website khác đến website của bạn.


<script language="JavaScript">
if (top.location != self.location)
{top.location = self.location}
</script>

Bạn có thể tại đoạn mã trên tại: http://www.mediafire.com/?weephu8sgdphwel

Cách 2: Chống tải lại trang web có ác ý

Một hình thức tấn công khác nữa là dùng phím F5 liên tục có chủ ý, hoặc dùng một phần mềm được lập trình sẵn với công dụng tương tự (tải lại trang web liên tục sau những khoảng thời gian định sẵn) của một nhóm người làm cho trang web của bạn tải lại (reload) liên tục. Việc này có thể làm tốn băng thông của trang web hoặc làm trang web chạy chậm vì những kết nối ảo.


Với cách thức tấn công này thì nếu dùng cách một để chống coi như là vô ích. Nếu bạn bị tấn công như thế này thì bạn hãy thiết lập tập tin .htaccess với nội dung:


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC]
RewriteRule !antiddos.phtml http://www.domain.com/antiddos.phtml?%{REQUEST_URI} [QSA]

Sau đó tạo thêm một một tập tin antiddos.phtml có nội dung


<?
$text = $HTTP_SERVER_VARS['QUERY_STRING'];
$text = preg_replace("#php\&#si",'php?',$text);
echo('<center><a href=http://www.domain.com/?'.$text.'><font color=red size=5 face=Monotype>[CLICK HERE TO ENTER]</font></a</center>');
?>

Sau đó bạn upload 2 tập tin này lên thư mục gốc của website. Như vậy là mỗi khi truy cập vào website, nếu lần đầu tiên thì sẽ có thông báo yêu cầu nhấn chuột thì bạn mới vào được website và ở các lần sau sẽ không có và các phần mềm DDOS được lập trình sẽ bị chặn lại ở bước click chuột để vào trang web ở lần truy cập đầu tiên nên việc tải lại trang web chỉ đơn thuần là 1 trang HTML nhỏ không ảnh hưởng nhiều đến hệ thống.

Bạn có thể đoạn mã trên tại: http://www.mediafire.com/?c41hmfeod3qxii8

Chú ý là cách này chỉ áp dụng cho website đang sử dụng server chạy trên nền Linux.

Cách 3: Giới hạn số kết nối website tại một thời điểm

Khi một khách truy cập vào website thì sẽ tạo ra một truy vấn kết nối với cơ sở dữ liệu (CSDL) lấy thông tin và trả về thông qua hiển thị của website. Mỗi máy chủ sẽ có phép bao nhiêu truy vấn kết nối là hạn định và khi vượt quá hạn mức này thì việc truy cập sẽ khó khăn hoặc không thể truy xuất được. Các tin tặc lợi dụng vào điều này để tạo ra các truy cập ảo, kết nối ảo thông qua proxy hay chuyên nghiệp hơn là mạng botnet nhằm đánh sập trang web và phá hỏng CSDL website. Để hạn chế điều này ta có thể chủ động giới hạn số kết nối truy vấn tin (lượt truy cập) cùng một thời điểm.
Bạn thêm dòng đoạn mã sau vào trang chủ của website.


function server_busy($numer) {
if (THIS_IS == 'WEBSITE' && PHP_OS == 'Linux' and @file_exists ( '/proc/loadavg' ) and $filestuff = @file_get_contents ( '/proc/loadavg' )) {
$loadavg = explode ( ' ', $filestuff );
if (trim ( $loadavg [0] ) > $numer) {
print '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />';
print 'Lượng truy cập đang quá tải, mời bạn quay lại sau vài phút.';
exit ( 0 );
}
}
}
$srv = server_busy ( 1000 ); // 1000 là số người truy cập tại 1 thời điểm

Đoạn mã trên có ý nghĩa cho phép 1000 người online trên website tại một thời điểm. Nếu vượt qua số 1000 thì khách truy cập sẽ nhận được thông báo: Lượng truy cập đang quá tải. Mời bạn quay lại sau vài phút.

Bạn có thể tải đoạn mã trên tại: http://www.mediafire.com/?exsl6hpd37eqnk3

Chú ý đoạn mã này chỉ áp dụng cho ngôn ngữ lập trình PHP.

Đây chỉ là ba cách chống đỡ mang tính chất giản đơn áp dụng cho những đợt tấn công nhỏ lẻ. Để website của mình hoạt động tốt và có sức chống chọi lại những đợt tấn công quy mô lớn bạn nên:

- Tối ưu hóa website ví dụ bạn có thể xây dựng bộ nhớ đệm (cache) cho website để nhằm giảm số kết nối vào CSDL.

- Lựa chọn nhà cung cấp hosting lưu trữ web tốt để có những đối phó với những đợt tấn công.

Cơn Gió
19-06-2011, 04:09 PM
Anh Trung nay lại quan tâm ghé thăm box của em à.
Chả mấy khi rồng đến nhà tôm:MatCuoi (23):

babylovevt
19-06-2011, 04:36 PM
Bác admin cho em hỏi, với cách thứ 3 mà bác nêu ở trên thì em phải chèn đoạn mã đó vào forum như thế nào?

admin
19-06-2011, 04:44 PM
Bác admin cho em hỏi, với cách thứ 3 mà bác nêu ở trên thì em phải chèn đoạn mã đó vào forum như thế nào?

Bạn có thể chèn vào file index.php hoặc file nào đó tùy bạn, riêng đối với forum vbb bạn nên chèn vào template header để tất cả các trang của forum đều được bảo vệ

babylovevt
19-06-2011, 05:11 PM
Bạn có thể chèn vào file index.php hoặc file nào đó tùy bạn, riêng đối với forum vbb bạn nên chèn vào template header để tất cả các trang của forum đều được bảo vệ
Anh nói rõ hơn giúp em nhé. Vì em thử chèn vào template "header" thì nó hiện nguyên xi ra trang chủ luôn.
Thanks

HTT.itvn
19-06-2011, 05:30 PM
<script language="JavaScript">
function server_busy($numer) {
if (THIS_IS == 'WEBSITE' && PHP_OS == 'Linux' and @file_exists ( '/proc/loadavg' ) and $filestuff = @file_get_contents ( '/proc/loadavg' )) {
$loadavg = explode ( ' ', $filestuff );
if (trim ( $loadavg [0] ) > $numer) {
print '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />';
print 'Lượng truy cập đang quá tải, mời bạn quay lại sau vài phút.';
exit ( 0 );
}
}
}
$srv = server_busy ( 1000 );
</script>


Chèn trên cùng nhé .

khangpro2812
01-08-2011, 11:08 PM
Bạn cho mình hỏi Cách 2 , code đó có phải sửa ji ko ? mình thử sửa thì khi vào trang nó hiện nguyên đoạn Code lên :| , còn ko sửa thì nó nhãy vào trang domain.com :|

t8mclub
02-08-2011, 12:08 AM
Chèn trên cùng nhé .
Anh ơi, em đưa xuống 2 để check thử mà nó đâu có chạy...code này hoạt động tốt không vậy anh.

minhthai
06-08-2011, 10:20 AM
cách thứ 2 là mình vào notebpad để paste đoạn code rồi save lại thì nó là file .txt hả admin. Sau đó mình up vào thư mục public_html hay là thư mục gốc ở ngoài của host...

Mình đã làm theo hướng dẫn nhưng k thấy hiện lên trang Clich Here to Enter

admin
06-08-2011, 11:05 AM
cách thứ 2 là mình vào notebpad để paste đoạn code rồi save lại thì nó là file .txt hả admin. Sau đó mình up vào thư mục public_html hay là thư mục gốc ở ngoài của host...

Mình đã làm theo hướng dẫn nhưng k thấy hiện lên trang Clich Here to Enter

tạo 2 file .htaccess và antiddos.phtml với nội dung như cách 2 hướng dẫn, sau đó upload 2 file này vào thư mục của site cần chống ddos, nếu upload vào public_html thì các site khác trên host đều như /forum, /music... đều nhận diện code chống ddos này

lenam804
06-08-2011, 11:20 AM
mình nghĩ đây chỉ là 1 số cách đơn giản thôi
chứ DOS Pro thì chịu chỉ còn 1 các là bớt náo đi ko lên thách thức người khác

minhthai
06-08-2011, 11:42 AM
mình đã làm như admin hướng dẫn thì báo lỗi. Thấy 2 dòng code ở cách 2 có chữ domain.com? K bít là mình để vậy luôn hay là thay = tên domain abc.vn của mình. Thanks

Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@abc.vn and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.