Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menghalang serangan CC dalam PHP? (contoh kod)

Bagaimana untuk menghalang serangan CC dalam PHP? (contoh kod)

PHPz
PHPzasal
2023-03-22 11:24:431913semak imbas

Dengan perkembangan Internet, kepentingan laman web semakin menonjol, tetapi pada masa yang sama ia juga menghadapi masalah keselamatan yang semakin serius, salah satunya adalah serangan CC. Serangan CC merujuk kepada penyerang berniat jahat yang menghantar sejumlah besar permintaan ke tapak web dengan mensimulasikan akses pengguna, menyebabkan sumber pelayan ranap. Untuk memastikan keselamatan tapak web, kami perlu mengambil satu siri langkah untuk mencegah serangan CC, yang paling biasa adalah menggunakan teknologi PHP untuk mencapai pertahanan.

Di bawah ini kami akan memperkenalkan kod pelaksanaan PHP yang ringkas dan mudah digunakan untuk menghalang serangan CC.

1. Tetapkan kekerapan akses

Pertama, kita perlu mengira kekerapan lawatan oleh pelawat dalam masa unit Jika kekerapan melebihi ambang pratetap dipertimbangkan untuk serangan CC, dengan itu menafikan akses. Berikut ialah contoh kod program PHP yang boleh mengira dan menyimpan bilangan lawatan untuk setiap alamat IP:

//设置阈值为100次/分钟
$throttle=100;
//获取访问者的IP地址
$ip=$_SERVER['REMOTE_ADDR'];
//获取当前时间的时间戳
$time=time();
//读取ip_access.log文件记录的IP地址访问次数
$log=file_get_contents("ip_access.log");
//将读取到的记录解析成数组
$log_arr=explode("\n",$log);
//初始化访问次数为0
$access_num=0;
//循环数组,查找当前访问IP地址的访问记录
foreach($log_arr as $access_log){
    $access_ip=explode("|",$access_log);
    if($access_ip[0]==$ip){
        $access_num=$access_ip[1];
        break;
    }
}
//计算这一分钟内的启动时间
$start_time=$time-60;
//将时间戳和访问次数以"|"的形式拼接成字符串,并存入ip_access.log文件
$log_str=$ip."|".($access_num+1)."\n";
file_put_contents("ip_access.log",$log_str,FILE_APPEND);
//获取这一分钟内所有IP地址的访问次数总和
$access_all=0;
foreach($log_arr as $access_log){
    $access_ip=explode("|",$access_log);
    if($access_ip[1]>0 && $access_ip[0]!=$ip && $access_ip[2]>$start_time){
        $access_all+=$access_ip[1];
    }
}
//如果访问次数超过了阈值,就将其视为CC攻击,停止访问
if($access_all>$throttle){
    die();
}

2. Tetapkan selang akses

Selain mengehadkan kekerapan capaian, kami juga boleh menetapkan selang capaian, iaitu tempoh masa tertentu perlu berada di antara dua capaian untuk menghalang penyerang berniat jahat daripada menyerang pelayan melalui penyegaran berniat jahat. Berikut ialah contoh kod program PHP yang boleh melaksanakan fungsi mengira selang akses pelawat:

//设置允许的最小访问间隔为3秒
$interval=3;
//获取访问者的IP地址
$ip=$_SERVER["REMOTE_ADDR"];
//获取当前时间的时间戳
$time=time();
//读取ip_access_time.log文件记录的IP地址的最近访问时间
$log=file_get_contents("ip_access_time.log");
//将读取到的记录解析成数组
$log_arr=explode("\n",$log);
//初始化最近访问时间为空
$last_access_time="";
//循环数组,查找当前访问IP地址的访问记录
foreach($log_arr as $access_time){
    $access_ip=explode("|",$access_time);
    if($access_ip[0]==$ip){
        $last_access_time=$access_ip[1];
        break;
    }
}
//如果最近访问时间不为空,并且与当前时间的差值小于设置的间隔时间,就将其视为CC攻击,停止访问
if(!empty($last_access_time) && ($time-$last_access_time)<$interval){
    die();
}
//将当前时间的时间戳以"|"的形式拼接成字符串,并存入ip_access_time.log文件
$log_str=$ip."|".$time."\n";
file_put_contents("ip_access_time.log",$log_str,FILE_APPEND);

3 Langkah lain yang perlu

Pertahanan terhadap CC serangan Beberapa langkah lain yang perlu juga diperlukan, seperti menetapkan kod pengesahan penyulitan, menyekat akses kepada halaman, dsb. Kita boleh merujuk kepada kod program PHP berikut untuk melaksanakan operasi tertentu:

//生成随机验证码,用于限制机器人访问
$captcha=rand(1000,9999);
//将验证码保存到session中,方便后期验证
session_start();
$_SESSION["captcha"]=$captcha;
//设置验证码图片的大小和颜色
$img_width=50;
$img_height=25;
$background_color=imagecolorallocate($img,238,238,238);
$text_color=imagecolorallocate($img,0,0,0);
//将验证码以图片形式输出
header("Content-type:image/png");
$img=imagecreate($img_width,$img_height);
imagefill($img,0,0,$background_color);
imagestring($img,5,10,5,$captcha,$text_color);
imagepng($img);
imagedestroy($img);
//限制特定的IP地址访问特定的页面
$ip=$_SERVER["REMOTE_ADDR"];
if($ip=="192.168.1.1"){
    die();
}

Ringkasnya, mencegah serangan CC memerlukan kami mengambil satu siri langkah, termasuk menetapkan kekerapan akses, selang akses, kod pengesahan, dll. Kod pelaksanaan di atas hanyalah kaedah pelaksanaan awal, dan ia perlu diselaraskan mengikut keperluan khusus dalam aplikasi sebenar. Saya harap artikel ini dapat memberi anda sedikit rujukan.

Atas ialah kandungan terperinci Bagaimana untuk menghalang serangan CC dalam PHP? (contoh kod). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn