Должен ли я использовать DNSBL для проверки веб-трафика, чтобы блокировать спамеров? - PullRequest
1 голос
/ 28 ноября 2010

Вместо того, чтобы только бороться со спамом с помощью CAPTCHA и контролеров спам-комментариев - это хорошая идея проверять каждый запрос против DNSBL и блокировать пользователя, если он использует плохой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');
    }
}

Кажется, что единственными проблемами может быть чрезмерная ревностная блокировка IP хороших пользователей DNSBL или большие затраты на поиск DNS для каждого запроса.

Ответы [ 2 ]

1 голос
/ 01 ноября 2014

Кстати, поиска, который вы там делаете, недостаточно, вам следует рассмотреть возможность использования чего-то вроде приведенного ниже кода. Кроме того, этот код также поддерживает тот тип разрешения ipv6, который поддерживает dnsbl.tornevall.org.

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)));
}
0 голосов
/ 28 ноября 2010

Это может помочь, но вам придется принять во внимание две вещи: ложные положительные и ложные отрицательные.

DNSBL, как правило, имеют довольно много обоих. Ложные срабатывания, которые поражают невинных пользователей, и ложные отрицания, которые будут пропускать хорошие куски бот-сетей Лучшее решение, которое я нашел для борьбы со спамом в Интернете, - это использование CAPTCHA.

...