>  기사  >  백엔드 개발  >  PHP가 웹사이트 콘텐츠를 보호하기 위해 안티 크롤러 기술을 구현하는 방법

PHP가 웹사이트 콘텐츠를 보호하기 위해 안티 크롤러 기술을 구현하는 방법

WBOY
WBOY원래의
2023-06-27 08:36:071726검색

인터넷이 발전하면서 웹사이트의 콘텐츠가 점점 더 풍부해졌고, 점점 더 많은 사용자가 방문하게 되었습니다. 그러나 이에 따른 문제는 악성 크롤러의 공격을 받아 웹사이트 콘텐츠가 크롤링되고 도난당한다는 것입니다. 따라서 웹사이트 콘텐츠를 보호하기 위해 크롤러 방지 기술을 사용하는 방법은 모든 웹마스터가 해결해야 하는 문제가 되었습니다. PHP는 배우기 쉽고 강력한 인기 있는 오픈 소스 스크립팅 언어입니다. 그렇다면 PHP를 사용하여 크롤러 방지 기술을 구현하는 방법은 무엇일까요? 다음은 이에 대해 자세히 설명합니다.

1. HTTP 요청 헤더 설정

일반적으로 일반 브라우저가 웹페이지에 액세스할 때 전송되는 요청 헤더에는 해당 매개변수 정보가 포함됩니다. 악성 크롤러는 일반적으로 이러한 매개변수를 전송하지 않으므로 HTTP 요청 헤더를 설정하여 악성 크롤러를 식별할 수 있습니다. PHP는 요청 헤더를 설정하는 데 사용할 수 있는 매우 편리한 함수인 cur_setopt()를 제공합니다. 구체적인 구현은 다음과 같습니다.

$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);

는 브라우저 유형, 소스 주소 및 기타 정보를 식별할 수 있는 User-Agent, Referrer 및 기타 정보를 요청 헤더에 추가합니다. 이 정보를 추가하지 않을 경우 악성 크롤러로 식별되어 차단될 가능성이 높습니다.

2. 인증 코드 확인

인증 코드는 인증 코드를 추가하여 컴퓨터가 자동으로 웹 사이트를 크롤링하는 것을 방지하는 효과적인 크롤러 방지 기술입니다. PHP에서는 GD 라이브러리와 Session 기술을 사용하여 검증 코드를 구현할 수 있습니다. 구체적인 코드는 다음과 같습니다.

<?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);
?>

이 코드는 GD 라이브러리의 기능을 통해 임의의 검증 코드를 생성하고 검증 코드를 Session에 저장합니다. . 사용자가 페이지를 방문할 때마다 해당 페이지에 인증코드를 추가하고, 사용자가 입력한 인증코드와 세션에 저장된 인증코드를 비교하여 동일하면 인증에 성공하고, 그렇지 않으면 인증에 실패합니다.

3. 액세스 빈도 제한

일부 크롤러는 자동으로 웹사이트를 루프로 크롤링하므로 웹사이트의 리소스가 빠르게 소모되고 웹사이트가 중단됩니다. 이러한 상황에 대응하여 우리는 웹 사이트에 액세스하는 각 IP 주소의 빈도를 제한하여 크롤러 공격을 억제할 수 있습니다. PHP에서는 Redis와 같은 캐시 데이터베이스를 사용하여 액세스 빈도를 제한할 수 있습니다. 구체적인 코드는 다음과 같습니다.

<?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("您的访问过于频繁,请稍后再试");
}
?>

이 코드는 Redis의 incr() 함수를 사용하여 각 IP 주소에 대한 방문 횟수를 누적하고, 방문 횟수가 도달하면 die() 함수를 사용하여 요청을 중단합니다. 최대 한도를 초과하면 나중에 다시 시도하라는 메시지가 사용자에게 표시됩니다.

요약하자면, 강력한 오픈 소스 스크립팅 언어인 PHP는 크롤러 방지 기술 구현을 잘 지원할 수 있습니다. HTTP 요청 헤더 설정, 인증코드 확인, 접속 빈도 제한 등을 통해 악성 크롤러의 웹사이트 공격을 효과적으로 방지하고 웹사이트 콘텐츠의 보안을 지킬 수 있습니다. 따라서 웹마스터는 웹사이트의 보안과 안정성을 향상시키기 위해 이러한 안티 크롤러 기술을 웹사이트에 추가하는 것을 고려할 수 있습니다.

위 내용은 PHP가 웹사이트 콘텐츠를 보호하기 위해 안티 크롤러 기술을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.