2009-08-31 3 views
2

거기에 PHP 스크립트를 통해 사용자 에이전트 중 일부를 차단하는 방법이 있습니까? 예제 mod_securityPHP를 사용하여 일부 HTTP 사용자 에이전트를 차단하는 방법

SecFilterSelective HTTP_USER_AGENT "Agent Name 1" 
SecFilterSelective HTTP_USER_AGENT "Agent Name 2" 
SecFilterSelective HTTP_USER_AGENT "Agent Name 3" 

또한 htaccess 또는 robots.txt를 사용하여 차단할 수 있습니다. 예를 들어 php를 원합니다. 모든 예제 코드?

답변

11

내가 Nerdling의 대답 @ 좋아하지만, 당신이 차단 될 필요가 사용자 에이전트의 아주 긴 목록이있는 경우 경우에 그것이 도움이 거기 있는지 확인 : 아직

$badAgents = array('fooAgent','blahAgent', 'etcAgent'); 
foreach($badAgents as $agent) { 
    if(strpos($_SERVER['HTTP_USER_AGENT'],$agent) !== false) { 
     die('Go away'); 
    } 
} 

더 나은는 :

$badAgents = array('fooAgent','blahAgent', 'etcAgent'); 
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) { 
    exit(); 
} 
+0

멋지지만 그는 많은 사용자 에이전트를 차단하지 않기를 바랍니다! –

+3

에 관계없이, 2 이상의 사용 도구가 있으면이 방법이 선호됩니다. –

+1

bravoo! 더 나은 아직 내가 원하는대로 작동합니다. – wow

2

정규식을 사용하면 연결을 차단하기 위해 많은 리소스가 추가되므로 사용하지 않아야합니다. 대신에, 단지 문자열이 strpos()

if (strpos($_SERVER['HTTP_USER_AGENT'], "Agent Name 1") !== false 
|| strpos($_SERVER['HTTP_USER_AGENT'], "Agent Name 2") !== false 
|| strpos($_SERVER['HTTP_USER_AGENT'], "Agent Name 3") !== false) { 
    exit; 
} 
+0

왜 당신은 정규 표현식을 사용하여 "많은 자원을 추가 할 것이다"고 생각하십니까? –

+1

PHP의 웹 사이트에 그렇게 나와 있기 때문에. –

+4

하위 문자열을 인덱스 0에 배치 할 수 있으므로 test> 0이 실패하므로 strpos ($ str)! == false를 사용해야합니다. 유형 테스트와 관련하여 strpos() 페이지에 특별히 메모가 있습니다. – Rob

관련 문제