3

PHPスクリプトを介してユーザーエージェントの一部をブロックする方法はありますか?mod_securityの例

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が必要です。サンプルコードはありますか?

4

2 に答える 2

13

@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();
}
于 2009-08-31T15:34:03.693 に答える
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;
}
于 2009-08-31T15:26:06.067 に答える