Dois-je utiliser un DNSBL pour vérifier le trafic Web pour les spammeurs de bloc?
-
28-09-2019 - |
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.
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)));
}