Должен ли я использовать DNSBL для проверки веб-трафика для блокировки спамеров?
-
28-09-2019 - |
Вопрос
Вместо того, чтобы исключительно бороться с спамом с помощью CAPTCHAS и SPAM Comments Checkers - это хорошая идея для Проверьте каждый запрос против А. Днсбл и заблокировать пользователю, если они используют плохой 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-поиска на каждый запрос.
Решение
Это может помочь, но вам придется во внимание две вещи: ложные позитивы и ложные негативы.
Dnsbls, как правило, довольно много обоих. Ложные позитивы, которые попадают в невинных пользователей и ложных негативов, которые будут пропустить хорошие кусочки ботнетов. Лучшее решение, которое я нашел для решения спама в Интернете, должен использовать CAPTCHAS.
Другие советы
Просмотр, вы делаете, кстати, не достаточно, вы должны рассмотреть возможность использования нечто вроде введенного ниже кода. Кроме того, этот код также поддерживает вид 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)));
}