Netsensei

Much Ado About Nothing

Referer Spam

Het is een oud zeer. Ik heb daar ook enorm veel last van. In de eerste plaats gaat het inderdaad om bots die massaal je pagina’s bezoeken en via de referer informatie in een HTTP request een linkje proberen te krijgen op je website via top 10 referer scripts en zo.

Als webeigenaar ben jij de dupe: er wordt immers reclame gemaakt op jouw kosten (bandbreedte). Bovendien is het vervuiling van je apache logfiles, je – vaak op deze logfiles gebaseerde – statistieken en van je databank als je referers logt. Ik kan mij voorstellen dat dit voor professionele websitebouwers die op basis van dergelijke informatie een profiel van bezoekers willen opstellen, een extra horde is.

Wat kan je er tegen doen? Wel, niet zo heel veel heb ik willen merken.

De HTTP specs (RFC 2616) schrijven voor uit welke velden een door een client gegenereerde HTTP request moet bestaan. Waar de inhoud van zo’n veld vandaan komt, dat wordt uiteraard niet gespecifieerd. Die vrijheid heeft tot misbruiken geleid.

Een client dient het referer veld in een HTTP request in te vullen. Dit is een ‘teruglink’ naar de bron waarvan de client naar een pagina werd geleid. Spammers schrijven bots die websites bezoeken en hun spamlinks expliciet via het referer veld proberen achter te laten.

Echter, een client moet via de user-agent string van een HTTP request zichzelf identificeren. De IE7 webbrowser heeft bijvoorbeeld deze identificatiestring:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
terwijl de Googlebot volgende string moet meegeven in het User Agent veld:
Googlebot/2.X (+http://www.googlebot.com/bot.html)
Je zou dus kunnen spammers kunnen blokkere n op basis van deze informatie via de .htaccess file en de robots.txt file. En strikt genomen kan je zo inderdaad wel wat spam tegenhouden. Helaas zijn ontwikkelaars ook hier vrij in de keuze van wat ze hier invullen. Gevolg: spammers kopiëren gewoon de user-agent strings van de grote browsers om zich te vermommen.

Wat je wel kan doen:

Referer spam is vrij doorzichtig. Door je apache logs te onderzoeken kan je al snel de spam terugvoeren tot een aantal IP adressen. Die kan je in je .htaccess file blokkeren. Jammer genoeg kan je dat niet lang volhouden omdat een lange .htaccess file parsen een serieuze aanslag is op de performance van je webserver. Een must is de aanwezigheid van een robots.txt file waarin je expliciet een aantal bots verbiedt of toelaat. Tenslotte kan je ook het nofollow attribuut opnemen in al je hyperlinks om spambots op een dood spoor te zetten.

O ja, je zou natuurlijk de referer wederkerig kunnen bevragen en zien of er daar inderdaad een effectieve, geldige link staat naar je pagina. Maar op die manier sla je het web effectief dood.

Desondanks is er – bij mijn weten – geen effectieve oplossing voor dit probleem en zal er altijd wel wat spam doorsijpelen.