Question

Au lieu de combattre uniquement le spam avec CAPTCHAs et dames de commentaire de spam - est-ce une bonne idée de vérifier chaque demande contre un DNSBL et bloquer l'utilisateur si elles utilisent un mauvaise IP?

$blacklists = array('web.sorbs.net', 'opm.tornevall.org');
$parts  = explode('.', $_SERVER['REMOTE_ADDR']);
$ip  = implode('.', array_reverse($parts)) . '.';
foreach($blacklists as $bl)
{
    $check = $ip . $bl;
    if ($check != gethostbyname($check))
    {
        error_log('PHP Security: [DNSBL] - ' . $_SERVER['REMOTE_ADDR'] . ' - ' . $bl);
        die('Put a detailed error here so the client knows why they have been blocked');
    }
}

Il semble que les seuls problèmes seraient IP trop zélés blocage des bons utilisateurs par le DNSBL ou le coût important de faire une recherche DNS chaque demande.

Était-ce utile?

La solution

Cela pourrait aider, mais vous devez prendre deux choses en considération. Faux Positifs et Négatifs Faux

DNSBL ont tendance à avoir un certain nombre de deux. Les faux positifs qui ont frappé les utilisateurs innocents, et de faux négatifs qui manqueront de bons morceaux de botnets. La meilleure solution que j'ai trouvé pour traiter le spam est en ligne CAPTCHAs d'utilisation.

Autres conseils

La recherche que vous faites, il est d'ailleurs pas assez, vous devriez envisager d'utiliser quelque chose comme le code ci-dessous à la place. En outre, le code prend en charge aussi le genre de IPv6 résoudre ce dnsbl.tornevall.org soutient.

function rblresolve ($ip = '', $rbldomain = '')
{
   if (!$ip) {return false;}                       // No data should return nothing
   if (!$rbldomain) {return false;}        // No rbl = ignore

   // New ipv6-compatible function
   $returnthis = (long2ip(ip2long($ip)) != "0.0.0.0" ? explode('.', gethostbyname(implode('.', array_reverse(explode('.', $ip))) . '.' . $rbldomain)) : explode(".", gethostbyname(v6arpa($ip) . "." . $rbldomain)));
   // 127-bug-checking
   if (implode(".", $returnthis) != (long2ip(ip2long($ip)) != "0.0.0.0" ? implode('.', array_reverse(explode('.', $ip))) . '.' . $rbldomain : v6arpa($ip) . "." . $rbldomain)) {return $returnthis;} else {return false;}
}
function v6arpa($ip)
{
   $unpack = unpack('H*hex', inet_pton($ip));
   $hex = $unpack['hex'];
   return implode('', array_reverse(str_split($hex)));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top