2009-08-31 8 views
2

PHPのスクリプトを使ってユーザエージェントをブロックする方法がありますか? mod_securityの例phpを使って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

接続をブロックすることを決定するだけの多くのリソースを追加するので、regexを使用しないでください。代わりに、単なる文字列は、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のWebサイトではそう言います。 –

+4

strpos($ str)!== falseを使用すると、部分文字列がインデックス0に配置される可能性があり、test> 0は失敗します。型テストに関するstrpos()ページの注釈があります。 – Rob

関連する問題