Php kullanarak http kullanıcı ajanı bazı engellemek için nasıl

2 Cevap php

php komut dosyası yoluyla kullanıcı ajanı bazı engellemek için bir yol var mı? Mod_security üzerindeki örnek

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

Ayrıca örnek htaccess veya robots.txt kullanarak bunları engelleyebilirsiniz ama ben php istiyorum. Herhangi bir örnek kod?

2 Cevap

Ben Nerdling cevabı @ seviyorum, ama bloke edilmesi gereken kullanıcı ajanların çok uzun bir liste varsa, o durumda, yararlı olur:

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

Daha da iyisi:

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

Bu sadece bir bağlantıyı engellemek için karar kaynakların çok şey katacak gibi bunun için regex kullanmaktan kaçınmalısınız. Bunun yerine, sadece dize strpos orada olup olmadığını kontrol edin ()

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;
}