Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana PHP melaksanakan teknologi anti-perakak untuk melindungi kandungan tapak web

Bagaimana PHP melaksanakan teknologi anti-perakak untuk melindungi kandungan tapak web

WBOY
WBOYasal
2023-06-27 08:36:071698semak imbas

Dengan perkembangan Internet, kandungan laman web menjadi semakin banyak, menarik lebih ramai pengguna untuk melawat. Tetapi masalah yang datang dengannya ialah ia diserang oleh perangkak berniat jahat, menyebabkan kandungan laman web dirangkak dan dicuri. Oleh itu, cara menggunakan teknologi anti-crawler untuk melindungi kandungan laman web telah menjadi masalah yang mesti diselesaikan oleh setiap juruweb. PHP ialah bahasa skrip sumber terbuka yang popular yang mudah dipelajari dan berkuasa Jadi bagaimana untuk menggunakan PHP untuk melaksanakan teknologi anti-crawler? Berikut akan menerangkannya kepada anda secara terperinci.

1. Tetapkan pengepala permintaan HTTP

Secara amnya, apabila penyemak imbas biasa mengakses halaman web, pengepala permintaan yang dihantar akan mengandungi maklumat parameter yang sepadan. Perangkak berniat jahat biasanya tidak menghantar parameter ini, jadi kami boleh mengenal pasti perangkak berniat jahat dengan menetapkan pengepala permintaan HTTP. PHP menyediakan fungsi yang sangat mudah curl_setopt(), yang boleh digunakan untuk menetapkan pengepala permintaan. Pelaksanaan khusus adalah seperti berikut:

$curl = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64...)");
curl_setopt($ch, CURLOPT_REFERER, "http://www.example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

menambah Ejen Pengguna, Perujuk dan maklumat lain pada pengepala permintaan, yang boleh mengenal pasti jenis penyemak imbas, alamat sumber dan maklumat lain. Jika maklumat ini tidak ditambahkan, ia mungkin dikenal pasti sebagai perangkak berniat jahat dan disekat.

2. Pengesahan kod pengesahan

Kod pengesahan ialah teknologi anti perangkak yang berkesan yang menghalang mesin daripada merangkak tapak web secara automatik dengan menambahkan kod pengesahan. Dalam PHP, kami boleh menggunakan perpustakaan GD dan teknologi Sesi untuk melaksanakan kod pengesahan Kod khusus adalah seperti berikut:

<?php
session_start();
$width=90;
$height=40;
$str = "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ0123456789";
$code = '';
for ($i = 0; $i < 4; $i++) {
   $code .= substr($str, mt_rand(0, strlen($str) - 1), 1);
}
$_SESSION['code'] = $code;

$img = imagecreatetruecolor($width, $height);
$bg_color = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $bg_color);
$font_file="arial.ttf";
for ($i = 0; $i < 4; $i++) {
     $font_size=mt_rand(14,18);
     $font_color=imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
     $angle=mt_rand(-30,30);
     $x=floor($width/6)*$i+6;
     $y=mt_rand(20, $height-10);
     imagettftext($img,$font_size,$angle,$x,$y,$font_color,$font_file,substr($code,$i,1));
}

header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>

Kod ini menjana kod pengesahan rawak melalui fungsi perpustakaan GD dan menyimpan kod pengesahan ke Sesi. . Setiap kali pengguna melawat halaman, anda boleh menambah kod pengesahan pada halaman dan membandingkan kod pengesahan yang dimasukkan oleh pengguna dengan kod pengesahan yang disimpan dalam Sesi Jika sama, pengesahan akan lulus, jika tidak pengesahan gagal.

3. Hadkan kekerapan akses

Sesetengah perangkak akan merangkak tapak web secara automatik dalam satu gelung, yang akan menggunakan sumber tapak web dengan cepat dan menyebabkan tapak web ranap. Sebagai tindak balas kepada situasi ini, kami boleh mengekang serangan perangkak dengan mengehadkan kekerapan setiap alamat IP mengakses tapak web. Dalam PHP, kita boleh menggunakan pangkalan data cache seperti Redis untuk mengehadkan kekerapan capaian. Kod khusus adalah seperti berikut:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$ip = $_SERVER["REMOTE_ADDR"];
$key = "visit:".$ip;
$count = $redis->get($key);
if(!$count) {
    $redis->setex($key, 1, 3);//3秒内允许访问一次
} elseif($count < 10) {
    $redis->incr($key);
} else {
    die("您的访问过于频繁,请稍后再试");
}
?>

Kod ini menggunakan fungsi incr() Redis untuk mengumpul bilangan lawatan ke setiap alamat IP, dan menggunakan fungsi die() untuk mengganggu permintaan Apabila bilangan lawatan mencapai had atas, pengguna akan digesa Cuba lagi kemudian.

Ringkasnya, PHP, sebagai bahasa skrip sumber terbuka yang berkuasa, boleh menyokong pelaksanaan teknologi anti-crawler. Dengan menetapkan pengepala permintaan HTTP, pengesahan kod pengesahan dan mengehadkan kekerapan akses, anda boleh menghalang perangkak berniat jahat daripada menyerang tapak web dan melindungi keselamatan kandungan tapak web dengan berkesan. Oleh itu, juruweb boleh mempertimbangkan untuk menambahkan teknologi anti perangkak ini pada tapak web mereka untuk meningkatkan keselamatan dan kestabilan tapak web.

Atas ialah kandungan terperinci Bagaimana PHP melaksanakan teknologi anti-perakak untuk melindungi kandungan tapak web. 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