voorkomen lezen email spambots

Hoe voorkom je dat spambots jouw e-mailadres kunnen lezen?

Als je een eigen website hebt, is het handig om daar je e-mailadres op te plaatsen. Bezoekers van je site kunnen zo gemakkelijk contact met je opnemen. Door je e-mailadres online te zetten, vergroot je echter wel de kans op spamaanvallen. Deze zijn niet alleen vervelend, maar brengen – wanneer er bijvoorbeeld phishing-mails worden ingezet – ook nog eens een veiligheidsrisico met zich mee. Hetzelfde geldt voor gehackt worden en malware die door cybercriminelen in e-mailbijlagen wordt verborgen. Veilig e-mailen is daarom erg belangrijk. Gelukkig zijn er voor dit probleem allerlei slimme oplossingen bedacht; websitebeheerders kunnen er op verschillende manieren voor zorgen dat spambots moeilijker toegang tot hun e-mailadressen krijgen. We vergelijken de populairste methoden en zetten de voor- en nadelen op een rij.


email harvesting

E-mail harvesting: zo gaan spambots te werk

E-mail harvesting is het automatisch vergaren van e-mailadressen voor reclamedoeleinden, phishing-aanvallen of de verspreiding van kwaadaardige software. Dit gebeurt meestal met behulp van bepaalde software. Gespecialiseerde programma’s, zogenaamde e-mail harvesters, scannen websites, mailinglijsten, internetfora en social media-pagina’s om e-mailadressen op te sporen. Daarbij laten de programma’s zich leiden door de karakteristieke opbouw van een e-mailadres. Het is bijvoorbeeld heel eenvoudig om in de broncode van een website te zoeken naar het @-teken. Dit is meestal niet terug te vinden in natuurlijke teksten, maar functioneert in een e-mailadres als scheidingsteken tussen de gebruikersnaam en het domein. Ook vervangende notaties bieden vaak weinig bescherming; geavanceerde spambots herkennen alternatieven als [at], [AT], (at), en (AT), zoals in het onderstaande voorbeeld:

gebruiker@domeinnaam.nl

gebruiker[at]domeinnaam.nl

Als het @-teken (of een equivalent ervan) gevolgd wordt door twee reeksen van tekens met een punt ertussen, dan is dit voor de harvester een duidelijke aanwijzing dat het om een e-mailadres gaat. Zelfs het herschrijven van de karakteristieke punt voor de domeinextensie biedt relatief weinig bescherming en heeft bovendien een negatief effect op de leesbaarheid:

gebruiker[AT]domeinnaam[PUNT]nl

Nog verraderlijker dan het @-teken is een HTML-e-maillink volgens het schema ‘mailto:gebruiker@domeinnaam.nl’. Deze biedt bezoekers van websites de mogelijkheid om met één klik meteen hun favoriete e-mailprogramma te openen. Het adres van de ontvanger wordt automatisch gekopieerd naar het juiste veld. Deze procedure is praktisch, maar maakt het voor spambots duidelijk dat ze een e-mailadres te pakken hebben. Het is dan ook raadzaam om, bij het aanbieden van e-mailmogelijkheden, de algemeen bekende patronen te vermijden. Idealiter doe je dit zonder de leesbaarheid voor menselijke bezoekers negatief te beïnvloeden, zodat gebruikers nog altijd gemakkelijk contact met je kunnen opnemen.


klassieke weergave emailadres

Klassieke weergave van e-mailadres zonder bescherming

Om een e-mailadres te beschermen tegen automatisch lezen door harvesters, moeten we eerst bekijken hoe het gewoonlijk op een website is geplaatst. Een eenvoudige, barrièrevrije weergave van het adres is op elke HTML-pagina mogelijk met bijvoorbeeld deze code:

<p>Wil je contact met ons opnemen? Stuur dan een bericht naar:
<a href="mailto:gebruiker@domeinnaam.nl">gebruiker@domeinnaam.nl</a>
</p>

Als een bezoeker een website met deze code oproept, geeft de webbrowser de volgende informatie weer, inclusief een aanklikbare mailto-link:

Wil je contact met ons opnemen? Stuur dan een bericht naar: gebruiker@domeinnaam.nl

Vanuit het oogpunt van de gebruiker is dit een handige weergave van het e-mailadres. Het gebruiksgemak van deze versie wil je als webmaster graag behouden. Daarom richten de populairste methoden om een e-mailadres te beschermen zich erop om het adres alleen in de broncode onherkenbaar te maken, zonder daarbij de weergave in de browser te veranderen. Je kunt het e-mailadres ook scheiden van de eigenlijke website en doorverwijzen naar de mailto-link via een server-redirect. In ieder geval kiezen steeds minder websitebeheerders voor een alternatieve weergave met bijvoorbeeld AT of PUNT; deze methode beschermt niet voldoende tegen spam en is niet echt gebruikersvriendelijk.

Effectieve trucs om e-mailadressen te beschermen tegen spam zijn gebaseerd op het vervangen, maskeren of versleutelen van de broncode. De spambot heeft daar last van, maar de gebruiker niet.


emailadres vervangen

E-mailadres vervangen

Beveiligingsstrategieën op basis van verganging halen het volledige e-mailadres uit de broncode en vervangen dit door een afbeelding of een omleiding naar de mailto-link.

E-mailadres als afbeelding

Als een e-mailadres als afbeelding op een webpagina staat, blijft het leesbaar voor het menselijk oog. Voor harvesters is het adres echter een stuk moeilijker te herkennen. Weliswaar bestaan er spambots die tekstelementen in afbeeldingen kunnen herkennen met behulp van OCR (Optical Character Recognition), maar de meeste bots zijn hier niet toe in staat. Daarom biedt het verwerken van contactgegevens in een afbeelding relatief goede bescherming tegen spam. Er is wel een nadeel: de gebruiksvriendelijkheid van de website lijdt eronder.

Met de HTML-code hieronder plaats je een e-mailadres als afbeelding op je website.

Het e-mailadres ziet er in de broncode dan als volgt uit:
<img src="Pad/afbeeldingsbestand.png" with="120" height="20" 
alt="Wil je contact met ons opnemen? 
Stuur dan een bericht naar gebruiker@domeinnaam.nl">

Bezoekers van de webpagina zien in de browserweergave de volgende afbeelding.

browserweergave emailadres

Deze e-mailweergave is voor de meeste mensen leesbaar. De tekst kan echter niet worden gekopieerd of gekoppeld aan een mailto-link. Natuurlijk is het voor de gemiddelde gebruiker geen probleem om het e-mailadres handmatig in te voeren, maar tekstinformatie in afbeeldingen is vaak niet leesbaar voor mensen met een visuele beperking. Een oplossing voor dat laatste probleem is het toevoegen van een duidelijke beschrijving in de alt-tekst; schermlezers van blinde en slechtziende bezoekers kunnen deze beschrijving waarnemen. Echter, spambots kunnen dat ook. En dus wordt het dilemma meteen duidelijk. Het grafisch weergeven van een e-mailadres voldoet als antispam-maatregel alleen als je geen rekening houdt met visueel beperkte gebruikers en is daarom niet aan te raden.

HTML-e-maillink via redirect

Een effectieve manier om e-mailadressen te beschermen tegen harvesters, is om het adres helemaal niet op de site te zetten. Meestal wordt daarbij een script gebruikt om bezoekers door te sturen naar de mailto-link. Die opent het e-mailprogramma van de bezoeker en toont het e-mailadres. Voor spambots die de broncode van een website scannen, lijkt zo'n link op een verwijzing naar een bestand. Een automatische uitlezing wordt daardoor lastig. Een voorbeeld van dit beschermingsmechanisme is een link naar een PHP-bestand:

<p>Wil je contact met ons opnemen? Stuur ons dan een <a href="redirect-mailto.php">e-mail</a>. </p>

Het bestand redirect-mailto.php bevat een script dat de gebruiker doorstuurt naar de mailto-link:

<?php header("Location: mailto:gebruiker@domeinnaam.nl");  ?>

Omdat PHP op de server draait, is het e-mailadres niet zichtbaar voor spambots die de broncode van de website lezen. Wil je het e-mailadres wel zichtbaar maken op de website? Combineer deze methode dan met een grafische weergave van het e-mailadres.

Het nadeel van deze oplossing is dat bezoekers een handler voor mailto nodig hebben om het e-mailadres te kunnen gebruiken. In de praktijk is dit meestal een e-mailprogramma zoals Outlook of Thunderbird. Op nieuwere browsers kunnen echter ook webmailers als handlers worden ingevoerd.


emailadres maskeren

Het e-mailadres maskeren

Wil je het e-mailadres niet volledig vervangen door een afbeelding of een link naar de mailto-referentie? Dan zijn er alternatieve strategieën beschikbaar waarmee je het e-mailadres kunt coderen. Je maskeert het bijvoorbeeld door het invoegen van extra elementen of je laat het dynamisch in de browser verschijnen via JavaScript. Een eenvoudige codering kan bijvoorbeeld door HTML-entities en URL- of HEX-codering worden geïmplementeerd. Eenvoudige maskeerstrategieën zijn gebaseerd op de commentaarfunctie, HTML-elementen en CSS. Een iets complexere maskeermethode is het dynamisch laten samenstellen van het e-mailadres.

Deze methoden onderscheiden zich van het simpelweg vervangen van karakteristieke tekens doordat het adres wordt gemanipuleerd in de broncode, zonder dat de weergave in de browser verandert.

Maskeren door tekencodering

Gangbare tekencoderingen die worden gebruikt om e-mailadressen in de broncode af te schermen zijn gebaseerd op HTML-entities, HEX-code of de procentuele weergave van URL-codering. Deze parafrases werden oorspronkelijk ontwikkeld voor de representatie van speciale karakters door standaardletters. Dit type codering is geschikt voor het maskeren van e-mailadressen, aangezien de respectievelijke referentietekens automatisch worden vertaald in de browserweergave.

Wil je de karakteristieke tekens van een e-mailadres (gebruiker@domeinnaam.nl) met HTML-entities maskeren? Dan zet je ze eerst om in de alternatieve notatie.

&commat; = @
&period; = . (punt)

Het e-mailadres ziet er in de broncode dan als volgt uit:

<p>Wil je contact met ons opnemen? Stuur dan een bericht naar:
<a href="mailto:gebruiker&commat;domeinnaam&period;nl"> gebruiker&commat;domeinnaam&period;nl</a>
</p>

Aangezien HTML-entities alleen voor speciale tekens zijn gedefinieerd, kun je met deze tekencodering niet het gehele e-mailadres en niet de string ‘mailto:’ versleutelen. Je kunt echter wel HEX-codering gebruiken voor deze gegevens. Daarbij gebruik je het Unicode-tekennummer en noteer je dat volgens dit schema:

&#tekennummer;

Het HEX-nummer van het teken verschijnt hierbij meestal als kleine ‘x’. De letter ‘m’ is bijvoorbeeld ‘&#x6d;’ of in decimale notatie ‘&#109;’. Het volgende voorbeeld toont het e-mailadres gebruiker@domeinnaam.nl, inclusief de mailto-link:

<p>Wil je contact met ons opnemen? Stuur ons dan een bericht per
<a href="&#103;&#101;&#98;&#114;&#117;&#105;&#107;&#101;&#114;&#64;&#100;&#111;&#109;&#101;&#105;&#110
;&#110;&#97;&#97;&#109;&#46;&#110;&#108;">e-mail</a>.
</p>

De tekens waarmee je het e-mailadres vertaalt, vind je in gratis lijsten op internet. Kijk bijvoorbeeld op htmlarrows.com. Wil je het volledige e-mailadres coderen? Dan is een coderingsprogramma handig. Ook dat vind je gratis op diverse websites.

Een andere manier om e-mailadressen tegen spam te beschermen is het gebruiken van URL-codering. Deze methode is oorspronkelijk ontwikkeld om speciale karakters in een URL geschikt te maken voor een browser. Hierbij werk je met driedelige tekencombinaties, die bestaan uit de tweecijferige ASCII-hexadecimale van het teken en een procentteken. Als je bijvoorbeeld het @-teken via URL-codering maskeert, krijg je dit:

<p>Wil je contact met ons opnemen? Stuur ons dan een bericht per 
<a href="mailto:gebruiker%40domeinnaam.nl">e-mail</a>.
</p>

Het maskeren van het e-mailadres via deze tekencodering is relatief eenvoudig. Het levert echter ook weinig bescherming op, omdat de meeste spambots tegenwoordig in staat zijn om dit soort versleutelingen te ontcijferen.

Maskeren door aanvulling

Je kunt een e-mailadres ook onbegrijpelijk maken voor spambots door extra tekens in te voegen. In het beste geval herkennen programma’s het adres dan niet, waardoor voorkomen wordt dat ze het automatisch uitlezen. Een heel eenvoudige manier om dit te doen, is het e-mailadres verstoppen tussen HTML-commentaren.

<!-- commentaar -->

Idealiter zijn de tekens die kenmerkend zijn voor een e-mailadres hierin opgenomen.

<!-- abc@nlp -->

<!-- @abc.nl -->

Voeg je zulke commentaren aan het e-mailadres toe, dan zien spambots die je website scannen de volgende code:

<p>Wil je contact met ons opnemen? Stuur dan een e-mail naar:
gebr<!-- abc@nl -->uiker@domei<!-- @abc.nl -->n.nl
</p>


In de browser zie je deze HTML-commentaren niet, maar ze staan wel in de broncode en verwarren de spambot.

Je kunt de extra tekens ook zonder commentaarfunctie invoeren, door ze met CCS in de browserweergave te verbergen. In het volgende voorbeeld wordt het e-mailadres onderbroken door een span-element. De inhoud tussen de begin- en eindtags zie je niet in de browser, vanwege de display-waarde ‘none’.

<style type="text/css">
span.spambescherming {display:none;}
</style>

<p>Wil je contact met ons opnemen? Stuur dan een e-mail naar:
gebruiker<span class="spambescherming">WILLEKEURIGWOORD</span>@domeinnaam.nl
</p>

Terwijl een menselijke gebruiker in de webbrowser het juiste e-mailadres ziet, leest een spambot waarschijnlijk de verborgen tekst in het span-element mee. Dit geeft websitebeheerders de mogelijkheid om het e-mailadres gebruikerWILLEKEURIGWOORD@domeinnaam.nl te gebruiken als zogeheten ‘honeypot’: een valstrik waar spammers hun mails naartoe sturen. Je krijgt dan de afzenderadressen van deze spammers en kunt ze meteen blokkeren.

Het nadeel van maskeren met een toevoeging is dat je het e-mailadres bij deze methode niet kunt koppelen aan een e-maillink in HTML. Gebruikers moeten het adres handmatig kopiëren naar hun e-mailprogramma.

De letters en cijfers omdraaien

Je kunt CSS niet alleen gebruiken om extra tekens in de broncode te verbergen, maar ook om de string om te draaien. Dit omgedraaide e-mailadres kun je in de broncode plaatsen om spambots te misleiden.

<style type="text/css">
span.ltrText {unicode-bidi: bidi-override; direction: rtl}
</style>

<p>Wil je contact met ons opnemen? Stuur dan een e-mail naar:
<span class="ltrText">ln.maanniemod@rekiurbeg</span>.
</p>

Spambots zien in de broncode het adres ln.maanniemod@rekiurbeg, maar de CSS-tag unicode-bidi met de waarde bidi-override zorgt ervoor dat alle tekens in dit span-element door de browser van rechts naar links worden gelezen, zoals in de eigenschap direction is vastgelegd (right to left, rtl).

Deze methode maakt het e-mailadres op het eerste gezicht onherkenbaar. Helaas kennen geavanceerde spambots deze truc inmiddels en trappen ze er niet meer in.

Dynamisch samenstellen met JavaScript

Je kunt het e-mailadres ook via JavaScript versleutelen, zodat het pas in de browser zichtbaar wordt. Deze methode hakt het adres in stukjes, die worden samengevoegd als een bezoeker de webpagina oproept.

<script type="text/javascript"> 
var part1 = "gebruiker";
var part2 = Math.pow(2,6);
var part3 = String.fromCharCode(part2);
var part4 = "domeinnaam.nl"
var part5 = part1 + String.fromCharCode(part2) + part4; document.write("Wil je contact met ons opnemen?
Stuur dan een e-mail naar: <href=" + "mai" + "lto" + ":" + part5 + ">" + part1 + part3 + part4 + "</a>.");
</script>

In de regels 2 tot en met 6 worden de afzonderlijke delen van het e-mailadres gedefinieerd. Het definiëren van het @-teken gebeurt in twee stappen. De functie Math.pow (2,6) in part2 bepaalt het aantal tekens in ASCII-compatibele tekensets (26 = 64). Dit wordt via de functie String.fromCharCode (part2) omgezet naar het overeenkomstige teken in part3. De uitvoer van de in part1 tot en met part5 gedefinieerde onderdelen gebeurt in regel 7 en 8 met de functie document.write(). Het e-mailadres is daarom pas volledig beschikbaar na uitvoering van het script bij de client. Er is ook een variant mogelijk waarbij het script pas start na een klik van de gebruiker.

Antispam-methoden die scripts gebruiken voor dynamische samenstelling van het e-mailadres, zijn gebaseerd op de veronderstelling dat spambots JavaScript niet volledig begrijpen. Is dat het geval, dan leidt deze methode tot een goede bescherming. Het nadeel is dat de methode niet werkt bij gebruikers die JavaScript in hun browser hebben uitgeschakeld. Dit komt echter slechts bij een klein deel van de gebruikers voor. Bovendien kun je deze groep een alternatief bieden door het e-mailadres ook als afbeelding op de site te plaatsen.


emailadres maskeren

Encryptie van het e-mailadres

Met JavaScript kun je niet alleen e-mailadressen laten opbouwen uit afzonderlijke onderdelen, maar je kunt er je e-mailadres ook mee versleutelen. Dit is een andere manier om spam tegen te gaan. Veel websitebouwers gebruiken hiervoor de ROT13-methode, die je met een paar regels JavaScript kunt implementeren.

<script type="text/javascript">
function decode(a) {
return a.replace(/[a-zA-Z]/g, function(c){
return String.fromCharCode ((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); }) }; function openMailer(element) {
var y = decode("troehvxre@qbzrvaannz.ay");
element.setAttribute("href", y); element.setAttribute("onclick", "");
element.firstChild.nodeValue = "E-mailsoftware wordt geopend "; };
</script> <a id="email" href=" " onclick='openMailer(this); '>E-mail: klik hier</a>

In deze voorbeeldcode zie je in regel 9 de versleutelde versie van het e-mailadres gebruiker@domeinnaam.nl, inclusief mailto-string (znvygb:troehvxre@qbzrvaannz.ay). Regels 2 tot en met 7 bevatten de decodering. De functie in de regels 8 tot en met 13 opent het gewenste e-mailprogramma van de gebruiker en schrijft het gedecodeerde adres naar de adresregel.

Het script wordt gestart door te klikken op een link met de ankertekst ‘E-mail: klik hier’ (regels 15 en 16). Na het klikken verschijnt de melding ‘E-mailsoftware wordt geopend’ (regel 12).

Evenals de eerder beschreven JavaScript-samenstelling van het e-mailadres, is de encryptiemethode gebaseerd op de veronderstelling dat spambots de scripttaal van de client niet of slechts gedeeltelijk begrijpen. Theoretisch gezien kan het versleutelde e-mailadres als honeypot worden gebruikt. In dat geval dien je de domeinnaam juist niet te versleutelen.

CAPTCHA's

CAPTCHA’s bieden eveneens de mogelijkheid om een e-mailadres tegen spam te beschermen. Deze methode versleutelt e-mailadressen en toont ze vervolgens alleen in platte tekst als een gebruiker op basis van een kleine test als menselijk is geïdentificeerd. Zo’n test is bijvoorbeeld het uittypen van een combinatie van letters of cijfers. Ook korte rekensommetjes of combinatie-oefeningen komen voor.

Google biedt een gratis CAPTCHA-service aan met reCAPTCHA.

CAPTCHA’s bieden een relatief hoge bescherming tegen spam, aangezien e-mailadressen helemaal niet of alleen versleuteld in de broncode zijn opgenomen. Je kunt CAPTCHA’s bovendien goed integreren in het ontwerp van je website dankzij de uitgebreide designmogelijkheden. Het nadeel is dat de gebruiker meer moeite moet doen om het e-mailadres te lezen, wat ten koste gaat van de gebruiksvriendelijkheid van de website.


het contactformulier als alternatief

Nog een alternatief: het contactformulier

In plaats van een e-mailadres op de website te plaatsen, kiezen veel websitebeheerders ervoor om een contactformulier aan te bieden. Daarmee kunnen bezoekers een bericht invoeren, evenals hun contactgegevens. De berichten worden op de achtergrond doorgestuurd naar een vastgelegd adres en het formulier werkt via een servergebaseerde programmeertaal, zoals PHP. Om te voorkomen dat spambots automatisch e-mailformulieren versturen, kun je het formulier op je website beveiligen met een CAPTCHA.


samenvatting emailadres beschermen

Samenvatting

Er is niet één perfecte strategie om het e-mailadres op je website te beschermen. Welke methode je kiest, hangt in de eerste plaats af van de eisen die je aan de weergave stelt en de technische mogelijkheden die beschikbaar zijn. Een redirect naar de mailto-functie via PHP of vergelijkbare servergebaseerde programmeertalen biedt een goede beveiliging, maar je hostingaanbieder moet dit wel ondersteunen. Ook het tonen van je e-mailadres via een afbeelding biedt goede bescherming tegen de meeste spambots. Bij deze methode komt echter de gebruiksvriendelijkheid van je site in gevaar. Minder bescherming bieden de eenvoudige coderingsmethoden via HTML-entities, HEX-code of URL-codering. Wel kun je deze laatste methoden als voorbereiding op een versleuteling gebruiken. Verder biedt het maskeren of versleutelen via JavaScript een relatief goede bescherming tegen spambots, evenals het aanbieden van een contactformulier.