Frage

Anstatt ausschließlich Spam mit CAPTCHAs und Spam-Kommentar Kontrolleure abwehren - ist es eine gute Idee, überprüfen jede Anfrage gegen einen DNSBL und den Benutzer sperren, wenn sie ein verwenden schlechte 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');
    }
}

Es scheint, wie die einzigen Probleme wären übereifriger IP guten Benutzer durch die DNSBL Sperrung oder die groß Kosten für die Herstellung eines DNS-Lookup jede Anforderung.

War es hilfreich?

Lösung

Dies könnte helfen, aber Sie werden zwei Dinge zu berücksichtigen haben. Fehlalarme und falsch negative Ergebnisse

DNSBLs sind im Allgemeinen recht einige beides. Fehlalarme, die ahnungslosen Anwender getroffen, und False Negatives, die guten Stücke von Botnets verpassen. Die beste Lösung, die ich habe online für den Umgang mit Spam gefunden, ist die Verwendung CAPTCHAs.

Andere Tipps

Das Nachschlagen Sie tun durch die Art und Weise es nicht genug ist, sollten Sie unten anstatt mit so etwas wie den Code betrachten. Außerdem unterstützt dieser Code auch die Art von IPv6-Lösung, dass dnsbl.tornevall.org unterstützt.

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)));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top