2009-08-31 11 views
2

il y a un moyen de bloquer certains de l'agent utilisateur via le script php? Exemple sur mod_securityComment bloquer certains des agents d'utilisateur http en utilisant php

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

On peut aussi les bloquer en utilisant htaccess ou robots.txt par exemple, mais je veux en php. Un exemple de code?

Répondre

11

J'aime @ la réponse de Nerdling, mais dans le cas où il est utile, si vous avez une très longue liste d'agents utilisateurs qui doivent être bloqués:

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

Mieux encore:

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

Bien mais j'espère qu'il ne bloque pas autant d'agents utilisateurs! –

+3

Quoi qu'il en soit, avec n'importe quoi au-dessus de 2 agents d'utilisateur ce serait la méthode préférée. –

+1

bravoo! un meilleur encore travailler comme je le voulais. – wow

2

Vous devriez éviter d'utiliser regex pour cela car cela ajouterait beaucoup de ressources juste pour décider de bloquer une connexion. Au lieu de cela, il suffit de vérifier pour voir si la chaîne est là avec 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

Pourquoi pensez-vous que l'utilisation d'une expression rationnelle « ajoutera beaucoup de ressources »? –

+1

Parce que le site web de PHP le dit. –

+4

Vous devriez utiliser strpos ($ str)! == false, car la sous-chaîne pourrait être positionnée à l'index 0, et le test> 0 échouerait. Il y a une note sur la page strpos() concernant spécifiquement les tests de type. – Rob