>  기사  >  백엔드 개발  >  웹사이트 크롤링을 금지하도록 PHP를 설정하는 방법

웹사이트 크롤링을 금지하도록 PHP를 설정하는 방법

藏色散人
藏色散人원래의
2020-07-24 09:35:542777검색

PHP에서 크롤링을 금지하는 방법: 먼저 "$_SERVER['HTTP_USER_AGENT'];" 방법을 통해 UA 정보를 얻은 다음 악성 "USER_AGENT"를 배열에 저장하고 마지막으로 빈 "USER_AGENT"와 같은 주류 수집 프로그램을 비활성화합니다. .

웹사이트 크롤링을 금지하도록 PHP를 설정하는 방법

추천: "PHP 튜토리얼"

우리 모두는 인터넷에 많은 크롤러가 있다는 것을 알고 있습니다. 일부는 Baidu Spider(Baiduspider)와 같이 웹사이트에 포함하는 데 도움이 되고 일부는 준수하지 않습니다. 압력을 가하고 웹사이트에 트래픽을 가져올 수 없는 쓸모없는 크롤러(최신 추가: Yisou Spider가 UC Shenma Search에 인수되었습니다! 따라서 이 기사에서는 Yisou에 대한 금지 조치를 해제했습니다.) 거미! ==> 최근 Zhang Ge는 nginx 로그에 Yisou 및 기타 쓰레기에 대한 크롤링 기록이 많다는 사실을 발견하고 쓰레기 거미가 웹 사이트를 크롤링하는 것을 방지하기 위해 인터넷에서 다양한 방법을 수집하고 수집했으며 자신의 웹 사이트를 설정했습니다. 또한 모든 웹마스터를 위한 참조 자료도 제공했습니다.

1. Apache

①, .htaccess 파일을 수정하여

2. Nginx 코드

nginx 설치 디렉터리 아래 conf 디렉터리에 들어가서 다음 코드를 agent_deny.conf
cd /usr/local/nginx로 저장합니다. /conf
vim Agent_deny.conf

#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~* "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}

그런 다음 웹 사이트 관련 구성에서 위치 / { 뒤에 다음 코드를 삽입합니다.
include Agent_deny.conf;
예를 들어 Zhang Ge의 블로그 구성:
[marsge@Mars_Server ~ ]$ cat /usr/ local/nginx/conf/zhangge.conf

location / {
try_files $uri $uri/ /index.php?$args;
#这个位置新增1行:
include agent_deny.conf;
rewrite ^/sitemap_360_sp.txt$ /sitemap_360_sp.php last;
rewrite ^/sitemap_baidu_sp.xml$ /sitemap_baidu_sp.php last;
rewrite ^/sitemap_m.xml$ /sitemap_m.php last;
保存后,执行如下命令,平滑重启nginx即可:
/usr/local/nginx/sbin/nginx -s reload

3. PHP 코드

웹사이트 항목 파일 index.php의 첫 번째 //UA 정보 가져오기

$ua = $_SERVER['HTTP_USER_AGENT'];
//将恶意USER_AGENT存入数组
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot');

//비어 있는 USER_AGENT를 비활성화하고, dedecms 및 기타 주류 수집 프로그램은 모두 비어 있으며, 일부 SQL 주입 도구도 비어 있습니다. USER_AGENT

if(!$ua) {
header("Content-type: text/html; charset=utf-8");
die('请勿采集本站,因为采集的站长木有小JJ!');
}else{
foreach($now_ua as $value )
//判断是否是数组中存在的UA
if(eregi($value,$ua)) {
header("Content-type: text/html; charset=utf-8");
die('请勿采集本站,因为采集的站长木有小JJ!');
}
}

4. 테스트 효과

vps인 경우 매우 간단합니다. 컬을 사용하세요. -A 크롤링 시뮬레이션 예:
Yisou Spider의 크롤링 시뮬레이션:
curl -I -A 'YisouSpider' zhang.ge
빈 UA의 크롤링 시뮬레이션:
curl -I -A '' zhang.ge
Baidu Spider Take 크롤링 시뮬레이션:
curl -I -A 'Baiduspider' zhang.ge

웹사이트 디렉토리에서 .htaccess를 수정하고 다음 코드(선택적 2개 코드)를 추가합니다. 세 가지 크롤링 결과의 스크린샷은 다음과 같습니다.

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

좋아요 Yisou Spider와 UA의 빈 반환은 403 금지 액세스 플래그인 반면 Baidu Spider는 200을 성공적으로 반환하여 효과적임을 알 수 있습니다!

보충: 다음날 nginx 로그 효과의 스크린샷 확인:

①, 빈 UA 정보가 있는 가비지 수집이 차단됨:

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

②, 금지된 UA가 차단됨:

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

따라서 스팸 스파이더의 수집을 통해 웹사이트의 액세스 로그를 분석하여 일부 알려지지 않은 스파이더의 이름을 알아낼 수 있으며 쿼리가 올바른 경우 이를 이전 코드의 금지 목록에 추가하여 크롤링을 금지할 수 있습니다. .

5. 부록: UA 수집

다음은 인터넷에서 흔히 볼 수 있는 스팸 UA 목록입니다. 참고용으로 추가하셔도 좋습니다.

아아아아

위 내용은 웹사이트 크롤링을 금지하도록 PHP를 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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