Referrer spam (also known as log spam or referrer bombing) is a kind of spamming aimed at web analytics tools. A spammer bot makes repeated web site requests using a fake referrer URL to the site the spammer wishes to advertise.
This is the easiest method, but requires the use of Composer. Add ReferrerSpamDetector to your project by running the following in your terminal:
composer require twodevs/referrer-spam-detector
This library will not provide any blocklist, but many list are online available:
- piwik/referrer-spam-blacklist
- Stevie-Ray/htaccess-referral-spam-blacklist-block
- antispam/false-referrals
- nabble/semalt-blocker
Download one or more list into you project directory.
There are multiple Providers available:
// DomainParser
$pslManager = new Pdp\PublicSuffixListManager();
$parser = new Pdp\Parser($pslManager->getList());
// Referrer Provider
$provider = new \TwoDevs\ReferrerSpamDetector\Provider\TxtListProvider(__DIR__.'/data/blocked.txt');
// Create detector
$detector = new \TwoDevs\ReferrerSpamDetector\ReferrerDetector($provider, $parser);
// Mock Referrer - Remove this line in production environment
$_SERVER['HTTP_REFERER'] = 'http://example.org/index.php?id=3';
$referrer = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
var_dump($detector->isSpamReferrer($referrer));
// DomainParser
$pslManager = new Pdp\PublicSuffixListManager();
$parser = new Pdp\Parser($pslManager->getList());
// Create as many provider as you want
$provider = new \TwoDevs\ReferrerSpamDetector\Provider\ChainProvider(array(
new \TwoDevs\ReferrerSpamDetector\Provider\TxtListProvider(__DIR__.'/data/blocked.txt'),
new \TwoDevs\ReferrerSpamDetector\Provider\JsonListProvider(__DIR__.'/data/blocked.json'),
));
// Create detector
$detector = new \TwoDevs\ReferrerSpamDetector\ReferrerDetector($provider, $parser);
// Mock Referrer - Remove this line in production environment
$_SERVER['HTTP_REFERER'] = 'http://dev.example.org/index.php?id=3';
$referrer = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
var_dump($detector->isSpamReferrer($referrer));
Yes, please! Feel free to open issues or pull-requests.
MIT