¿Debo usar un DNSBL para comprobar el tráfico de Internet a los spammers de bloque?
-
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.
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)));
}