PDA

View Full Version : Hỏi Về Code Chống Dos



Bá Đạo
13-06-2009, 16:37
- Kính Chào Các Anh Chị DDTH.
- Khi tìm hiểu về phòng chống Dos em có tìm thấy một đoạn code chống Dos có nội dung như sau:
"


/* Ok, giờ bạn có hai chọn lựa:
- Điều chỉnh bật/tắt chống ddos trực tiếp trên file này (1)
- Điều chỉnh bật/tắt chống ddos ở một file trên một host khác (2)
*/

$scheme = 1; //Điền một trong hai số: 1: Chọn cách điều chỉnh thứ (1) 2: Chọn cách điều chỉnh thứ (2)

// Nếu bạn lựa chọn giải pháp (1) thì hãy edit phần này:
$antidos = 1; //Nhập 1 để bật, 0 để tắt chống ddos

// Nếu bạn lựa chọn giải pháp (2) thì hãy edit phần này:
$determiner = "http://another.com/determiner.txt"; //Link tới file quy định bật/tắt chống ddos - Nếu bạn muốn bật chống ddos chỉ việc nhập vào nội dung file này số "1"


//Có thể chỉnh sửa phần sau hoặc để nguyên vậy cũng được
$redirect = "<center><br><br><br><br><center><a href='".$_SERVER['REQUEST_URI']."'>[ Click Vào đây ]</a> <br>Để tới trang bạn cần xem</center>";

// -------------- Hết phần thông tin cần chỉnh sửa - Không chỉnh sửa phần dưới!!! ------------


//##########################################
// ### Okie, chúng ta vào việc nào (-_-) ###
//##########################################

//Ok, định nghĩa mí cái function đã

function url_exists($url) {
$a_url = parse_url($url);
if (!isset($a_url['port'])) $a_url['port'] = 80;
$errno = 0;
$errstr = '';
$timeout = 30;
if(isset($a_url['host']) && $a_url['host']!=gethostbyname($a_url['host'])){
$fid = fsockopen($a_url['host'], $a_url['port'], $errno, $errstr, $timeout);
if (!$fid) return false;
$page = isset($a_url['path']) ?$a_url['path']:'';
$page .= isset($a_url['query'])?'?'.$a_url['query']:'';
fputs($fid, 'HEAD '.$page.' HTTP/1.0'."\r\n".'Host: '.$a_url['host']."\r\n\r\n");
$head = fread($fid, 4096);
fclose($fid);
return preg_match('#^HTTP/.*\s+[200|302]+\s#i', $head);
} else {
return false;
}
}


function on_off($file) {
$string = file_get_contents($file);
$fetch = strstr($string,"1");

if ($fetch) {
return true;
}

else {
return false;
}
}

function level_1() {
global $antidos, $redirect;
if($antidos){
if(!$_SERVER['HTTP_REFERER']) {
echo $redirect;
exit;
}
}
}

function level_2() {
global $antidos, $redirect, $yoursite;
if($antidos){
if(strpos($_SERVER['HTTP_REFERER'], 'http://www.'.$yoursite) !== 0) {
if(strpos($_SERVER['HTTP_REFERER'], 'http://'.$yoursite) !== 0) {
echo $redirect;
exit;
}
}
}
}

// Done function definition ^_^


if($scheme == 1) {
if($level == 1) level_1();
elseif($level == 2) level_2();
else { echo "Bạn phải chọn \$level = 1 hoặc \$level = 2"; exit; }
}

elseif($scheme == 2) {
if (!url_exists($determiner)) $antidos = 1;
else { $antidos = on_off($determiner); }

if($level == 1) level_1();
elseif($level == 2) level_2();
else { echo "Bạn phải chọn \$level = 1 hoặc \$level = 2"; exit; }
}

else {
echo "Bạn phải chọn \$scheme = 1 hoặc \$scheme = 2";
exit;
}

?>
=================

"
------>> Em thử nghiệm cho trang http://noone.hostwq.net/ (índex.php)
- khi lần đầu tiên vào http://noone.hostwq.net/ thì nó sẽ báo click "vào đây" --> khi đã vào trong site rồi em refetch thi nó không báo nữa. Nếu em coppy địa chỉ sang một trình duyệt khác thì nó lại báo click "vào đây".
- Anh chị giúp em cho em hỏi tại sao nó có thể làm được như vậy.?

------>> Theo cách hiểu của em thì đoạn code này sẽ xủ dụng biến $_SERVER['HTTP_REFERER'] để ghi nhận xem đây có phải là lần đầu truy cap hay không ?
- Cho em hỏi cách hiểu của em như vậy có đúng không ?
- Mong các anh chị giúp đỡ.
- Em xin cảm ơn.

khuongCOMPUTER
13-06-2009, 16:44
$_SERVER['HTTP_REFERER'] là thông số của trang chứa link được click đến trang hiện tại. Vd đơn giản: click vào link từ kết quả search trên Google thì Ref là địa chỉ trang có chứa link (google), còn copy đưa vào trình duyệt thì ref="". Code này chỉ kiểm tra xem ref có xuất phát từ trang của mình hay không, nếu không thì bắt click 1 cái để có ref.
Tóm lại: code này có bị DDoS thì cũng hứng ít nhất là 70% bomb.

Bá Đạo
13-06-2009, 18:20
Em xin Cảm Ơn anh KhuongCOMPUTER.

Shellingfox
13-06-2009, 20:41
Có nhiều người ảo tưởng là có thể chống DDoS ở tầng Application nhỉ :)

Bá Đạo
13-06-2009, 21:18
Ngoài việc nâng cấp phần cứng, hạn chế paket, tăng băng thông theo Shellingfox còn cách nào khác để hạn chế ddos nữa...

khuongCOMPUTER
13-06-2009, 21:27
Không gây thù chuốc oán, ăn nói cẩn trọng nhỏ nhẹ, post bài quảng cáo không quá lộ liễu và đúng nơi qui định...

Shellingfox
13-06-2009, 21:50
@Bá Đạo: Thì tìm hiểu cứ việc tìm hiểu thôi. Còn khi thật sự gặp vấn đề rồi bạn sẽ hiểu. Nếu xài shared host thì kêu HP suppend. Còn có quyền root thì cần có một cái đầu :).



Không gây thù chuốc oán, ăn nói cẩn trọng nhỏ nhẹ, post bài quảng cáo không quá lộ liễu và đúng nơi qui định...
Ý bạn là?

canh_nguyen
13-06-2009, 21:53
@Bá Đạo: Thì tìm hiểu cứ việc tìm hiểu thôi. Còn khi thật sự gặp vấn đề rồi bạn sẽ hiểu. Nếu xài shared host thì kêu HP suppend. Còn có quyền root thì cần có một cái đầu :).



Ý bạn là?
Thế la rõ lắm rồi mà

netvnasia
15-06-2009, 20:45
Vưt mấy cái code đi, ko ăn thua gì đâu. DDOS Protection thì phải đặt ở trên Server chứ đem Apache ra mà chống ddos thì có mà chóng die.

ngocminh20012007
15-06-2009, 22:23
Vưt mấy cái code đi, ko ăn thua gì đâu. DDOS Protection thì phải đặt ở trên Server chứ đem Apache ra mà chống ddos thì có mà chóng die.

Hình như DDOS Protection không thấy ở HP trong nước mà chỉ có ở HP nước ngoài thì phải?

LinuXpert
15-06-2009, 22:31
Tấn công DoS thì có nhiều dạng và chắc chắn không thể nào chống DoS bằng cái code hạn chế truy cập này tuy nhiên nó cũng giúp hạn chế một phần tấn công từ newbie, do đó cứ dùng cũng được nếu OK.

AkuVn
16-06-2009, 09:23
Cứ sever thật khỏe :D
Chứ cách này chống mấy người mới nghịch thôi chứ dân DDOS thực thụ họ chơi thì chống bằng trời :D

Bá Đạo
28-06-2009, 23:06
Các bác cho em hỏi mình phát hiện bị dos bằng cách nào vậy ?
+ Có domain riêng.
+ Share hosting.
Thanks.