هل يجب علي استخدام DNSBL للتحقق من حركة المرور على الويب لمنع مرسلي البريد العشوائي؟

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

  •  28-09-2019
  •  | 
  •  

سؤال

بدلاً من القتال فقط عن البريد العشوائي مع Captchas و Spam Checkers - هل من الجيد أن تكون فكرة جيدة تحقق من كل طلب ضد أ 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 كل طلب.

هل كانت مفيدة؟

المحلول

قد يساعد هذا ، ولكن سيتعين عليك أخذ شيئين في الاعتبار: إيجابيات كاذبة وسلبيات خاطئة.

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)));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top