Pergunta

Há uma maneira de bloquear parte do agente do usuário por script PHP? Exemplo em mod_security

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

Também podemos bloqueá -los usando htaccess ou robots.txt pelo exemplo, mas eu quero no PHP. Algum exemplo de código?

Foi útil?

Solução

Eu gosto da resposta de @Nerlding, mas, caso seja útil, se você tiver uma lista muito longa de agentes de usuários que precisam ser bloqueados:

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

Melhor ainda:

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

Outras dicas

Você deve evitar o uso do Regex para isso, pois isso adicionará muitos recursos apenas para decidir bloquear uma conexão. Em vez disso, basta verificar se a string está lá com 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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top