Пример #1
0
 public function testInvalidDomains()
 {
     foreach ($this->invalidDomains as $url) {
         $parsedRootDomain = \Nabble\SemaltBlocker\Domainparser::getRootDomain($url);
         $this->assertEquals(false, $parsedRootDomain);
     }
 }
Пример #2
0
function clean($url, $list = [])
{
    // only hostnames & path
    $url = Domainparser::getHostname($url) . Domainparser::getPath($url);
    // delete redundant subdomains
    $root = Domainparser::getRootDomain($url);
    if (!empty($list) && $root !== Domainparser::getHostname($url) && in_array($root, $list)) {
        $url = '';
    }
    // trailing /
    $url = trim($url, '/');
    // lower case
    $url = strtolower($url);
    $url = trim($url);
    $punicode = new \TrueBV\Punycode();
    $url = iconv("UTF-8", "ISO-8859-1", $punicode->encode($url));
    return $url;
}
Пример #3
0
 /**
  * @depends testRetrieveDomainlist
  */
 public function testBlocked()
 {
     $this->mockReferer(null);
     $this->assertFalse(Blocker::blocked(), 'Should not block unset referer');
     $this->mockReferer('');
     $this->assertFalse(Blocker::blocked(), 'Should not block empty referer');
     $this->mockReferer(self::INVALID_DOMAIN);
     $this->assertFalse(Blocker::blocked(), 'Should not block invalid referer');
     $badReferrals = $this->getBadReferrals();
     if (empty($badReferrals)) {
         $this->markTestIncomplete('Could not fetch bad referers for testing');
     }
     foreach ($badReferrals as $badReferral) {
         if ($badReferral && substr($badReferral, 0, 1) !== '#') {
             // Referer matches blocked domain exactly
             $this->mockReferer($badReferral);
             $this->assertTrue(Blocker::blocked(), 'Should block bad referer ' . $badReferral);
             // Hostname of referer matches blocked domain exactly
             $this->mockReferer('http://' . $badReferral);
             $this->assertTrue(Blocker::blocked(), 'Should block bad referer http://' . $badReferral);
             // Referer is a subdomain of blocked domain (only on root domains with no path)
             if (($root = Domainparser::getRootDomain($badReferral)) === $badReferral && !trim(Domainparser::getPath($badReferral), '/')) {
                 $this->mockReferer('http://test.' . $badReferral);
                 $this->assertTrue(Blocker::blocked(), 'Should block bad referer http://test.' . $badReferral . ' but it\'s not (' . Blocker::explain() . ')');
             }
             // Referer is a root domain of blocked subdomain
             if ($root !== $badReferral) {
                 $this->mockReferer($root);
                 $this->assertFalse(Blocker::blocked(), 'Should not block root domain ' . $root);
             }
         }
     }
     foreach ($this->goodReferrals as $goodReferral) {
         $this->mockReferer($goodReferral);
         $this->assertFalse(Blocker::blocked(), 'Should not block good referer ' . $goodReferral);
     }
 }
Пример #4
0
    } else {
        if (!empty($regex)) {
            preg_match_all($regex, $raw, $list);
            $list = array_filter($list[1], function ($v) {
                return filter_var($v, FILTER_VALIDATE_URL) || filter_var('http://' . $v, FILTER_VALIDATE_URL);
            });
        } else {
            $list = explode("\n", $raw);
        }
    }
    echo $source . " contains " . count($list) . " source(s)\n";
    $spammers = array_merge($spammers, $list);
}
// only top-level domains
foreach ($spammers as &$spammer) {
    $spammer = \Nabble\SemaltBlocker\Domainparser::getRootDomain($spammer);
}
// merge & cleanup spammers
if ($includeOldList) {
    $spammers = array_merge(\Nabble\SemaltBlocker\Blocker::getBlocklist(), $spammers);
}
$spammers = array_map('strtolower', $spammers);
$spammers = array_map('trim', $spammers);
$punicode = new \TrueBV\Punycode();
foreach ($spammers as &$spammer) {
    $spammer = iconv("UTF-8", "ISO-8859-1", $punicode->encode($spammer));
}
$spammers = array_unique($spammers);
$spammers = array_filter($spammers);
sort($spammers);
// echo some info