¿Debo usar un DNSBL para comprobar el tráfico de Internet a los spammers de bloque?

StackOverflow https://stackoverflow.com/questions/4295511

  •  28-09-2019
  •  | 
  •  

Pregunta

En lugar de exclusivamente combatir el spam con letras cifradas y damas comentarios no deseados - que es una idea buena a comprobar cada petición contra un DNSBL y bloquear el usuario si están utilizando una mal 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');
    }
}

Parece que los únicos problemas que habría un exceso de celo bloqueo de IP de los usuarios por la buena DNSBL o el gran costo de hacer una búsqueda de DNS cada solicitud.

¿Fue útil?

Solución

Esta ayuda puede, pero usted tendrá que tener dos cosas en cuenta:. Falsos positivos y falsos negativos

DNSBLs tienden a tener un buen número de ambos. Los falsos positivos que afectaron a los usuarios inocentes y falsos negativos que se perderá buenas trozos de redes de bots. La mejor solución que he encontrado para tratar con el spam en línea es el uso de letras cifradas.

Otros consejos

Las operaciones de búsqueda que está haciendo no es por cierto no es suficiente, se debe considerar el uso de algo así como el código de abajo en su lugar. Además, este código también es compatible con el tipo de ipv6-resolviendo que dnsbl.tornevall.org está apoyando.

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)));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top