17 Tips voor een betere website beveiliging

Beveiliging op het internet is op het moment een hot-topic. Links en rechts worden er nieuwsberichten gepubliceerd dat er een datalek is bij website X, vervolgens is er ingebroken bij website Y en ga zo maar door. Hoewel internet en website beveiliging constant in het nieuws is, het lijkt vaak toch wel ver weg. Elke dag worden er enkele tienduizenden websites gehackt, en jouw website kan zomaar de volgende zijn. Elke website heeft te maken met inbraakpogingen, vaak zelfs meerdere keren per dag. In de meeste gevallen merk je hier helemaal niets van. Maar het hoeft maar één keer fout te gaan en je zit gelijk met een bord vol problemen.

Elke minuut worden er (tien)duizenden aanvallen wereldwijd uitgevoerd, de meeste van deze aanvallen zijn onsuccesvol. Dat het merendeel van deze aanvallen mislukken en ongemerkt zijn is niet echt opzienbarend. Het grootste deel van dit aanvallend-internetverkeer is namelijk niet afkomstig van echte mensen. Bijna alle digitale inbraakpogingen zijn geautomatiseerd. De meeste van deze automatische inbraakpogingen gaan willekeurige websites of IP adressen af en proberen in te loggen met veelvoorkomende inloggegevens. Voor deze automatische inbraakpogingen maakt de grootte van je website niets uit. Op deze manier alleen al hebben de meeste websites al gelijk te maken met enkele tientallen inbraakpogingen per week.

De gevolgen van een gehackte website

klik hier om gelijk naar de tips te gaan.
Dat een gehackte website foute boel is hoeven we niet uit te leggen. Maar een gehackte website heeft niet altijd dezelfde directe gevolgen. Soms is het mogelijk dat je het niet eens door hebt dat er is ingebroken op je website, maar wat gebeurt er dan eigenlijk?

Ongemerkt gebruik door hackers

Als je website is gehackt hoef je dit niet gelijk te merken, sommige doelen zijn namelijk zeer goed verborgen en laten zichzelf niet zomaar zien. Een voorbeeld hiervan is als je website of webruimte stiekem gebruikt wordt voor andere doelen.
In dit geval wordt jouw website onderdeel van een gigantisch netwerk dat stiekem aanvallen gaat doen op andere websites. Of nog erger, je website wordt gebruikt in een netwerk om DDoS aanvallen uit te voeren.
Het kan ontzettend lang duren voordat je zelf echt doorhebt dat je website op de achtergrond is gekaapt, maar de consequenties zijn zeker merkbaar.

Het grootste probleem van dit type hack is dat het je eigen website eigenlijk niet direct schaadt. Er is maar een kleine hoeveelheid kwalijk verkeer afkomstig van je website, misschien wordt er maar één keer per week via jouw website een aanval uitgevoerd. Hierdoor duurt het lang voordat alles aan het licht komt.  Het probleem wordt pas zichtbaar zodra andere partijen jouw website gaan wantrouwen, en dat is een probleem want het succes van jouw website heeft veel te maken met vertrouwen bij andere partijen.
Een gevolg zal zijn dat de reputatie van je website een klap krijgt. En dit zal weer leiden tot problemen met (bijvoorbeeld) SEO.

Het achterhalen van privé gegevens

Privé gegevens zijn een bekend doel voor hackers. Creditcard gegevens, adresgegevens, email adressen en wachtwoorden zijn enkele voorbeelden van de informatie die achterhaald kan worden via een data lek.
Meestal is het voorpagina nieuws zodra ergens privé gegevens zijn gestolen, maar in het nieuws gaat het enkel over gigantische organisaties die in het vizier zijn gekomen van hackers. Vaak ontstaat hierdoor de gedachte dat kleine websites geen doelwit zijn. Helaas is dit niet het geval.
Elke website met gegevens die ook maar een klein beetje interessant kunnen zijn is gelijk een doelwit.

Bij een data lek van privé gegevens krijg je een heel scala aan problemen. Dat je gehackt bent is maar één deel van de problemen waar je mee te maken kan krijgen. De reputatieschade is gigantisch en dit kan financiële gevolgen hebben. Het is praktisch gegarandeerd dat webshops met een data lek klanten zullen verliezen.
Daarnaast wordt er meestal een zogenoemde "backdoor" geplaatst op je website zonder dat je dit merkt. Met zo'n backdoor kan een hacker zonder al te veel moeite opnieuw toegang krijgen tot je website en de gegevens die je verwerkt.

Spamverspreiding

Spam is iets wat iedereen kent. Of het nou via de e-mail is of via andere kanalen, iedereen heeft ooit wel eens te maken gehad met spammers. Als je zelf spam ontvangt dan denk je er meestal niet zo veel van. Het is echter ook mogelijk dat jouw website wordt gebruikt om anderen te spammen na een hack. Er zijn verschillende manieren waarop spamverspreiding plaats kan vinden via jouw website. De grootste open deur is spamverspreiding via reacties op berichten zoals blogartikelen, in dit geval heb je niet eens met hackers te maken maar alleen met zogenoemde "spambots". Heel schadelijk zal dit niet zijn, en het is bovendien nog relatief makkelijk om spambots te bestrijden.

Helaas zijn er ook spammethodes die niet gelijk zichtbaar zijn of makkelijk om op te lossen. Zo is het mogelijk dat er wordt ingebroken op een website waarna de website wordt gebruikt om spam e-mails te verzenden naar een gigantische hoeveelheid mensen. Vaak zal je dit niet zelf direct doorhebben, de spammers gebruiken namelijk verschillende methoden om ervoor te zorgen dat jij niet doorhebt wat er aan de hand is. Met deze manier van spammen kan je serieuze problemen krijgen voor je website of bedrijf. Als de spam ongecontroleerd doorgaat dan zal je positie op de zoekmachines binnen een dag merkbaar dalen. Na enkele dagen zal je merken dat je eigen e-mails opeens niet meer geaccepteerd worden bij de grote e-mail providers zoals Gmail, Yahoo en Microsoft. Je zult dus moeten touwtrekken met deze organisaties om ervoor te zorgen dat je domein wordt gezien als betrouwbaar, en dit gevecht wil je absoluut voorkomen aangezien het soms maanden kan duren.

Verspreiding van malware

Verspreiding van malware is iets wat helaas ook voor kan komen via een nietsvermoedende website. De detectie hiervan is echter steeds beter en de kans wordt elke dag kleiner dat je hiermee echt te maken krijgt. Het kan echter nog steeds gebeuren en de consequenties zijn niet mis. Afhankelijk van de bouw van je website is het voor een hacker mogelijk om stukken code toe te voegen aan jouw website. Een gevolg kan zijn dat website bezoekers op de achtergrond een virus downloaden terwijl ze aan het lezen zijn over de nieuwe spijkerbroekencollectie van je webshop. De eerste partijen die merken wat er aan de hand is zullen de zoekmachines zijn en anti-virus programma's.

Als je gebruik maakt van diensten voor je website van Google of Bing dan zal je redelijk snel bericht krijgen dat er ongewone activiteit is waargenomen (met een dringende ondertoon om dit op te lossen). Kort hierna zal je merken dat je positie in zoekmachines extreem snel zal dalen en het zal ontzettend lang duren voordat je website weer zal stijgen in de zoekresultaten. Daarnaast kan het zo zijn dat je website terecht komt op een zogenoemde "web trust blacklist". De Web Trust lijsten worden beheerd door enkele van de meest invloedrijke bedrijven op het gebied van internet veiligheid, twee voorbeelden zijn Google Safe Browsing en McAfee SiteAdvisor. Het duurt meestal redelijk lang voordat je echt op een blacklist terecht komt, maar als je er eenmaal op staat is het lastig om er weer vanaf te komen.

De malware waarschuwing van Google SafeBrowsing

Normaal merk je niet zo veel van de Web Trust lijsten, normaal is dit ook niet nodig aangezien het systemen zijn die op de achtergrond het werk doen. Het duurt best wel lang voordat je op een blacklist terecht komt en je zal (meestal) meerdere berichten krijgen over de status van je website. Het kan echter gebeuren dat je toch te maken krijgt met een blacklist en dit kan je voor maanden of soms jaren achtervolgen. Je kan gelijk merken dat het verkeer naar je website daalt naar bijna niks, je bezoekers worden namelijk gegroet met een melding zoals de afbeelding hierboven. Je kan de mogelijk waarschuwingen zelf zien via testsafebrowsing.
Mocht het toch zo zijn dat je website is opgenomen in de blacklist van Google SafeBrowsing dan is het natuurlijk nodig om dit op te lossen, Sucuri heeft een goed artikel hoe je dit het beste kunt aanpakken.

De checklist

Deze tips dienen als een basis voor iedereen die een website heeft, websites bouwt of websites beheert. Het maakt niet zo veel uit of je nou een starter bent in de wereld van websites of veteraan. Het is nou eenmaal de nare werkelijkheid dat elke website wel te maken krijgt met spammers en hackers. Je kan deze tips een beetje zien als een checklist om te kijken of je website in de basis wel veilig is.

Voor deze tips hoef je niet per sé een ontwikkelaar te zijn, kennis van code is handig maar niet nodig. Indien er een complexere tip is dan hebben we de handelingen uitgeschreven of we linken naar een helpdesk artikel waar dit beschreven staat.

#1 - Wees altijd up-to-date

Het updaten van je website software is eigenlijk de absolute basis als het aankomt op de veiligheid van je website. Updates van je CMS, plugins, modules of themas brengen vaak verbeterde beveiligingsmaatregelen met zich mee.
Alle software wordt minder veilig over tijd, het maakt eigenlijk niet uit met welke software je website is gemaakt. Het is daarbij natuurlijk wel belangrijk om software te gebruiken die regelmatig wordt geüpdate. Hoewel het vaak onschuldig lijkt om een update zo nu en dan over te slaan is helaas het tegengestelde waar. Het komt namelijk extreem vaak voor dat er op een website wordt ingebroken via een verouderde plugin of thema.

Indien automatisch updaten van plugins mogelijk is via je CMS dan is dit zeker het overwegen waard. Let hierbij wel op dat het mogelijk is dat plugins met elkaar gaan conflicteren, het is dus belangrijk dat je wel alle updates in de gaten houdt.
Als dit niet gewenst is dan kun je overwegen om gebruik te maken van "managed" diensten, hierbij wordt de zorg van je systeem up-to-date houden weggenomen. Beheerde diensten bestaan ondertussen voor praktisch elk CMS en dit kan een hele hoop schelen. Zo bieden we zelf Managed WordPress hosting die de zorg van updaten wegneemt samen met vele andere voordelen.

#2 - Gebruik goede wachtwoorden

Het gebruik van sterke wachtwoorden is cruciaal op het internet. Het inbreken bij websites via zwakke wachtwoorden is nog steeds de meest voorkomende manier waarop websites in de problemen komen. Vaak worden er nog steeds wachtwoorden gebruikt zoals "wachtwoord123" of variaties op woorden door middel van tekens: "W@chtw00r_d".
Het probleem is dat dit soort wachtwoorden nog steeds heel makkelijk te raden zijn voor computers, het is dus nodig dat wachtwoorden complexer worden maar dan kunnen we ze weer niet onthouden. De adviezen voor wachtwoorden zijn steeds weer anders en iedereen zegt dat het anders moet. Maar hoe moet het dan?

Of een wachtwoord écht sterk is, is afhankelijk van maar 2 factoren: Lengte en complexiteit. Een lengte van 12 tekens is tegenwoordig toch echt wel het minimum, en hoe complexer (willekeurige tekens) deze 12 of meer tekens hoe beter je wachtwoord. Let hierbij op dat je wachtwoord van letters en tekens niet op een echt bestaand woord lijkt... Het gebruik van "b@nkaut0maat" is namelijk weliswaar 12 tekens maar een stuk minder sterk als wachtwoord in vergelijking tot "2ksj5dZ{y7;h".
Het enige probleem wat nu nog bestaat is ons eigen geheugen, want zo'n volledig willekeurig wachtwoord is natuurlijk wel heel veilig maar niet te onthouden. Zeker niet als je gaat bedenken dat je wachtwoorden niet moet hergebruiken op andere websites.

Gelukkig is er een oplossing voor ons geheugenprobleem in de vorm van een wachtwoord-manager. Dit is een programma op je computer of laptop (en ook smartphone als je dit wilt) dat de wachtwoorden voor je onthoud en tegelijk controleert of je bestaande wachtwoorden wel veilig genoeg zijn. Om eerlijk te zijn, deze oplossing is natuurlijk niet ideaal. Maar het is zeker een betere oplossing dan vasthouden aan zwakke wachtwoorden. Goede wachtwoord-manager programma's zijn onder andere Dashlane, LastPass, en 1Password. Het is ook mogelijk om voor een Open-Source programma te kiezen zoals KeePass.

#3 - Limiteer het aantal login pogingen

Een veelvoorkomende methode om in te breken bij websites is brute-force. Dit houdt in dat een computer gewoon wachtwoorden gaat proberen in de hoop dat er een keer goed wordt gegokt. Een beetje moderne computer kan dit met enkele duizenden wachtwoorden per seconde uitvoeren. In het ergste geval wordt je wachtwoord gekraakt, en als dit niet gebeurt zit je nog steeds met het feit dat er duizenden pogingen per seconde zijn om in te loggen. Als dit niet wordt geblokkeerd dan zal dat betekenen dat je website een stuk trager zal worden voor normale bezoekers.

De oplossing is het limiteren van het aantal inlogpogingen per IP adres. Bijna elk CMS heeft wel verschillende plugins om dit mogelijk te maken. Voor WordPress kan je gebruik maken van de WP Limit Login Attempts plugin. In het geval van Joomla is er een vergelijkbare plugin genaamd Brute Force Stop die prima werkt. En als je Drupal gebruikt moet je soms wat verder zoeken maar ook hier is een plugin beschikbaar genaamd Login Security.

Deze plugins zijn specifiek voor het blokkeren van inlog pogingen, je kan ook kiezen voor de plugins die beschreven staan bij tip #14

#4 - Maak gebruik van 2 factor autorisatie

Naast een sterk wachtwoord is het sterk aan te raden om gebruik te maken van 2 factor autorisatie, of soms tweestaps-authenticatie genoemd. Het concept is simpel, om in te kunnen loggen moet je bewijzen dat jij wel echt eigenaar bent van het account. Dit gaat meestal door middel van je smartphone en ook dan kan het op verschillende manieren. Sommige websites gebruiken nog een SMS bevestiging die naar je mobiele nummer wordt gestuurd maar het komt steeds vaker voor dat 2 factor authenticatie via een app gaat op je smartphone. Hiervoor zijn verschillende apps beschikbaar op zowel Android als IOS, de meest bekende zijn de Google Authenticator en Authy.

Beide apps werken op een vergelijkbare methode, de website waar je 2FA (2 factor authenticatie) wilt activeren laat een QR code zien die je scant met je app. Hiermee wordt je telefoon geregistreerd als het verificatie apparaat. Vervolgens zal je app een combinatie van 6 cijfers laten zien die elke 30 seconden verandert. Om in te loggen heb je dus nu de gebruikersnaam nodig in combinatie met het wachtwoord maar óók de 6 cijfers op je telefoon.

#5 - Kies goede hosting

Deze tip is zeer belangrijk voor de veiligheid van je website, het is jammer dat het gelijk een "wij van wc-eend adviseren wc-eend" verhaal wordt. Je hosting provider is de partij die het fundament moet neerleggen voor de veiligheid van je website. Je kan geen veilige website hebben als de server zo lek is als een mandje. Zo is het nodig dat je niet zomaar kunt inloggen in FTP of SSH, het is echt nodig dat deze protocollen goed dicht getimmerd zijn. Daarnaast is het nodig dat er genoeg veilige methodes beschikbaar zijn die je kunt gebruiken om je website op te zetten, zoals sFTP in plaats van gewoon FTP.

Bovendien is het belangrijk dat de hostingprovider controleert of geüploadde bestanden op de server wel virusvrij zijn en dat accounts goed zijn afgeschermd. Verder is het belangrijk dat de hostingpartij gebruik maakt van sterke encryptie-protocollen en algoritmes voor onder andere HTTPS. Hosting providers anno 2018 moeten echt het zogenoemde "security by design" principe aanhouden, dit houdt in dat een infrastructuur of systeem vanaf het eerste moment is gemaakt om veilig te zijn zoals onze nieuwe webhosting.

#6 - Gebruik HTTPS

HTTPS is ondertussen de standaard aan het worden op het internet, en dat is hartstikke goed. Als je nog geen gebruik maakt van HTTPS dan is het zeer sterk aan te raden om dit zo snel mogelijk in te stellen. Op deze manier is de verbinding tussen je website en de bezoeker versleuteld. Je kunt meer lezen over HTTPS en waarom het belangrijk is in ons blogartikel over SSL (HTTPS).

Maar zodra je een SLL certificaat hebt voor je website en dus HTTPS gebruikt dan ben je er nog niet. Het is handig om een SSL test te doen via de website van Qualys. Deze test controleert of het SSL certificaat voor je website en de instellingen van de server wel veilig genoeg zijn. De resultaten van deze test kunnen nogal ingewikkeld zijn dus hieronder hebben we aangegeven waar je op moet letten.

  • Algemene Beoordeling
    • Indien je een gratis SSL certificaat gebruikt moet de algemene beoordeling minimaal een B+ zijn.
    • Als je een betaald SSL certificaat gebruikt moet de algemene beoordeling minimaal een A zijn.
  • Configuratie
    • De ondersteunde protocollen moeten TLS 1.1TLS 1.2 of TLS 1.3 zijn. Het protocol TLS 1.0 raden we af aangezien dit ondertussen verouderd is.
    • Let op dat onder "Cipher suites" niets staat aangegeven als zwak of onveilig.
    • Onder het kopje "Handshake simulation" mag niets aangegeven staan in oranje of rode letters.
    • Bij "Protocol details" mag niets aangegeven staat in oranje of rode letters.
De resultaten van de SSL test voor ons demo-domein: niqexdemo.com

Mocht het zo zijn dat de test een probleem aangeeft bij de bovenstaande punten dan kun je 2 dingen doen. De eerste optie is om te vragen aan je hosting provider om de problemen op te lossen. De tweede optie om over te stappen naar een andere hostingprovider die wel aan deze eisen voldoet.

#7 - Maak gebruik van de Google Search Console

De Google Search Console is op zichzelf een geweldige tool om inzichten te krijgen over SEO en hoe je je website kunt laten groeien. Maar wat vaak wordt vergeten is dat de Search Console ook inzicht kan geven in de kwaliteit en veiligheid van je website. De Search Console scant je website regelmatig, indien er abnormaliteiten worden gedetecteerd dan krijg je hierover melding. Hierdoor heb je wat meer inzicht in de status van je website.

Je kunt je hier aanmelden voor de Google Search Console.

#8 - Stel de juiste bestandspermissies in

De bestandspermissies vertellen aan een server wie specifieke bestanden wel of niet mag inzien of bewerken. Goede instellingen voor bestandspermissies zijn belangrijk aangezien je niet wilt dat een willekeurige bezoeker bestanden kan bewerken. De bestandspermissies worden ingesteld met cijfercodes tussen 0000 en 0777, deze cijfercodes vertellen aan de server welke soort gebruiker wel of niet iets mag doen. Het is niet echt nodig dat je zelf precies weet waar elke code voor staat, je kunt echter wel controleren of de huidige instellingen van je website goed staan ingesteld met onderstaande mini-checklist

  • Alle mappen moet ingesteld zijn met code 755 of 750
  • Normale bestanden moeten ingesteld zijn met code 644 of 640
  • Configuratie bestanden moeten ingesteld zijn met code 440 of 400
  • Er mag geen enkele map zijn met code 777

#9 - Maak gebruik van sFTP

Als je een eigen website in elkaar hebt geknutseld en je wilt deze uploaden naar de webserver dan zal je meestal FTP gebruiken. Dit staat voor File Transfer Protocol en is een redelijk snelle manier om bestanden van je computer naar de server te verplaatsen. FTP heeft echter een probleem: het is eigenlijk niet meegegaan met de beveiligingseisen van nu. In principe is het mogelijk dat een hacker kan meekijken in je verbinding terwijl je bestanden aan het uploaden bent via FTP. Hiervoor is een oplossing in het licht geroepen met de naam sFTP wat officieel SSH File Transfer Protocol heet, maar het wordt vaker Secure FTP genoemd.

Het grote verschil tussen gewoon FTP en sFTP is de versleutelde verbinding. Het instellen van sFTP is wat gecompliceerder dan normaal, maar dit is het wel waard aangezien sFTP echt vele malen sterker is dan normaal FTP.
Het verschilt per hosting partij hoe sFTP opgezet moet worden, kijk hier voor ons helpdesk artikel over sFTP voor meer informatie over het opzetten van sFTP op onze servers.

#10 - Blokkeer toegang tot configuratie bestanden

Bij tip #8 is al besproken welke permissies ingesteld moeten zijn voor specifieke bestanden. Het is echter ook verstandig om toegang tot specifieke bestanden volledig te weigeren. Zo is het handig om de toegang tot configuratie bestanden gewoon te weigeren aangezien deze vaak informatie bevatten over o.a. je database. Daarnaast hebben veel Content Management Systemen bestanden die je liever wilt afschermen, voorbeelden zijn "wp-config.php" voor WordPress en "Configuration.php" in Joomla. Je kunt de onderstaande stukjes code kopiëren (let op dat je de code for het juiste CMS kopiëert) en plakken in je .htaccess bestand om dit voor elkaar te krijgen.

Het blokkeren van wp-config.php (WordPress)

<files wp-config.php>
order allow,deny
deny from all
</files>

Het blokkeren van configuration.php (Joomla)

<files configuration.php>
order allow,deny
deny from all
</files>

#11 - Blokkeer toegang tot xmlrpc.php (WordPress)

Nu we toch bezig zijn met het blokkeren van specifieke bestanden dan is het belangrijk dat we even één extra bestand in WordPress onder de loep nemen: xmlrpc.php
Het xmlrpc.php bestand maakt het mogelijk om content op je website te publiceren vanaf een externe locatie, via een app bijvoorbeeld. Tot zo ver klinkt het nog redelijk onschuldig. Het probleem van het xmlrpc.php bestand is dat het ook toelaat dat er tienduizenden wachtwoorden per minuut geprobeerd kunnen worden om in te loggen. Veel plugins die het aantal inlogpogingen limiteren zoals in tip #3 controleren alleen het inlog formulier.

De ingebouwde beveiliging van het xmlrpc.php bestand en WordPress is de afgelopen jaren al gigantisch verbeterd. Maar het komt nog steeds voor dat er Brute-force aanvallen en DDoS aanvallen worden uitgevoerd via het xmlrpc.php bestand. Als je geen gebruik maakt van de functionaliteiten die dit bestand brengt dan kun je het beste dit bestand blokkeren. Let op, de JetPack plugin maakt gebruik van dit bestand en werkt dus niet meer zodra xmlrpc.php wordt geblokkeerd.
Je kunt het bestand blokkeren door onderstaande code te kopiëren en te plakken in je .htaccess bestand.

<files xmlrpc.php>
order allow,deny
deny from all
</files>

#12 - Gebruik een gemaskeerde database prefix

Als een extra maatregel tegen geautomatiseerde aanvallen is het handig om je de tabellen in je database een willekeurige prefix te geven. Dit wordt in de beveiligingswereld "Security Through Obscurity" genoemd, dit betekend beveiliging door geheimhouding. Een echte hacker wordt hierdoor niet gestopt, maar het is prima om geautomatiseerde aanvallen te weren. Het is belangrijk om te onthouden dat Security Through Obscurity géén echte website beveiliging is en alleen werkt tegen geautomatiseerde aanvallen.

Als voorbeeld van een willekeurige prefix gebruiken we de database structuur van WordPress. Standaard wordt bij WordPress de "wp_" prefix gebruikt voor de database tabellen. Een geautomatiseerde aanval probeert in het wild in te breken bij tabellen die beginnen met wp_, als de tabellen echter nooit met wp_ beginnen dan wordt de aanvraag gelijk geweigerd. Een voorbeeld van een willekeurige prefix is yju_ in plaats van wp_.

#13 - Controleer of databases niet extern bereikbaar zijn

Als een extra beveiligingsmethode voor je database kun je controleren of de database in kwestie extern bereikbaar is. Dit houdt in dat je een verbinding met de database kunt maken zonder dat deze eerst is goedgekeurd. In plaats van alleen de gebruikersnaam en het wachtwoord moet óók het IP adres van de verbinding kloppen voordat je toegang krijgt tot de database. Dit is iets wat je hosting partij wel of niet heeft ingesteld. Op onze webhosting servers staat dit standaard ingeschakeld, het is dus nodig om eerst het IP adres toe te voegen als een vertrouwd adres. Op deze manier wordt je website beveiliging net wat sterker door dubbele controle.

#14 - Installeer een "Web-Application-Firewall" voor je CMS

Doe vooral jezelf een plezier en gebruik een beveiligings-plugin voor je CMS. Hoewel deze plugins vaak niet perfect zijn is het gegarandeerd dat deze plugins een heleboel hoofdpijn kunnen voorkomen. Let echter op dat plugins voor de beveiliging van je CMS geen magie kunnen, je zult zelf nog steeds bezig moeten zijn met de beveiliging van je website.
Een zogenoemde Web Application Firewall is nodig om te compenseren voor de gebreken van je CMS. Elke week worden er wel gaten of exploitatie-mogelijkheden gevonden in de populairdere CMS'en. Vaak is het zo dat de ontwikkelaars van het CMS zelf niet snel genoeg kunnen handelen om deze gaten weer te repareren. De beveiligings-plugins kunnen dit wel (tot op een zekere hoogte) wat ervoor zorgt dat de algemene veiligheid van je website een stuk beter wordt. Hieronder hebben we een lijst met goede plugins.

#15 - Zorg ervoor dat bezoekers geen onbekende bestandstypen kunnen uploaden

In de wereld van het internet moet je er eigenlijk van uit gaan dat alles wat een gebruiker kan invullen of uploaden eng is. Alles wat ingevuld of geüpload kan worden kan namelijk (in principe) ook misbruikt worden. Zeker als het gaat om het uploaden van bestanden moet je uitkijken. Er zijn verschillende manieren waarop een bestandsupload schadelijke gevolgen kan hebben. De meest voorkomende methode is echter via verschillende bestandstypen.

Het is belangrijk dat het uploaden van bestanden alleen mogelijk is voor goedgekeurde bestandstypen. Zo kan je voorkomen dat er een bestand wordt geüpload dat je website of de server schaadt.
Een bestandstype dat je doorgaans wilt voorkomen in uploads is XML. Dat is niet per sé omdat XML gevaarlijk is, maar het is helaas wel makkelijk te misbruiken voor een slimme hacker.
Het is verstandiger om alleen bestandsuploads toe te staan voor typen bestanden die je zelf vertrouwd. Zoals PDF bestanden of simpele tekst bestanden.

#16 - Gebruik systemen voor reacties met ingebouwde anti-spam tools

Spammers kunnen echt een verschrikking zijn. Naast het feit dat je er gek van kan worden kan het ook daadwerkelijk nadelige gevolgen hebben voor je website. De meeste spam berichten staan vol met links naar shady websites. Helaas is het zo dat zoekmachines ook deze reacties kunnen zien en ze vaak meenemen in de indexatie. Dit kan ervoor zorgen dat zoekmachines je gaan zien als een website die actief linkt naar bijvoorbeeld phishing sites. Een daling in de resultaten bij zoekmachines zal direct merkbaar zijn. Het niet bestrijden van spam kan dus serieuze gevolgen hebben voor je SEO.

Er zijn verschillende manieren waarop je spam kunt bestrijden. De makkelijkste manier is zelf niet spam bestrijden. Het is een stuk makkelijker om gebruik te maken van diensten die dit voor je doen. Bovendien levert het meestal betere resultaten op dan je eigen filterregels instellen. Zelf gebruiken we Disqus voor mogelijke reacties op onze artikelen. Disqus heeft ingebouwde anti-spam functies die erg goed werken en is makkelijk om op te zetten.
Heel veel andere "all-in-one" oplossingen zijn er eigenlijk niet wat jammer is. Als je geen oplossing zoals Disqus wilt gebruiken moet je terugvallen op andere systemen voor reacties op artikelen. Dit is nog steeds mogelijk maar moet dan via plugins worden opgelost. Een goede WordPress plugin om spam te bestrijden is Akismet in combinatie met de standaard WordPress reacties. Het is ook mogelijk om te kijken naar oplossingen zoals Google Recaptcha op je website.

#17 - Stel de juiste Server headers in

De laatste tip op onze lijst, en misschien wel gelijk de langste. Server Headers zijn een belangrijk onderdeel van het functioneren van websites. De headers hebben op zichzelf een cruciale rol voor je website, daarom kunnen ze zeer belangrijk zijn voor je website beveiliging. Het leveren van de server headers is praktisch het eerste wat de server doet. Goed ingestelde headers kunnen dus gelijk vertellen wat de computer van een bezoeker wel of niet mag doen. Je kunt zelf je huidige server headers controleren op de site securityheaders.com. Hieronder hebben we de belangrijkste server headers op een rijtje gezet.

De Strict-Transport-Security header

De Strict-Transport-Security header, of afgekort HSTS, is een belangrijke header voor communicatie tussen website en bezoeker. Deze header verteld namelijk aan de computer van een bezoeker dat onbeveiligde communicatie niet is toegestaan. Dit is iets anders dan het doorsturen naar HTTPS. Als je verkeer doorstuurt naar HTTPS dan zegt de server eigenlijk dat de bezoeker naar een ander adres moet. In het geval van de HSTS header doet de computer van de bezoeker dit. De computer van de bezoeker onthoudt namelijk dat alleen HTTPS is toegestaan.

De HSTS header is dus eigenlijk een efficiëntere manier om HTTPS te forceren op je website. Er zit echter één nadeel aan dit systeem: zodra je bent gestart kan je niet meer terug. Meestal is dit echter geen echt probleem, SSL certificaten zijn namelijk makkelijk te verkrijgen.

De X-frame-options header

De x-frame-options header is een belangrijke header om een hackmethode genaamd "clickjacking" tegen te gaan. Het is mogelijk om via een zogenoemd iframe website informatie in te laden op een andere website. In het geval van Clickjacking is dit zeer gevaarlijk. Het is namelijk mogelijk om het uiterlijk van jouw website in te laden maar de links te veranderen. Dit is mogelijk door de manier waarop websites worden ingeladen, dit gebeurt in laagjes. Dit klinkt heel technisch en dat is het helaas ook. De Australische Troy Hun heeft een (technisch) goed artikel geschreven over clickjacking en hoe dit werkt. Je kunt dit artikel hier lezen.

De X-xss-protection header

De X-xss-protection header heeft de functie om XSS aanvallen tegen te gaan. XSS is de afkorting voor Cross Site Scripting, een methode voor hackers om uitvoerbare code te injecteren op je computer. De X-xss-protection header is een configuratie header. Het geeft een instructie aan de computer van de bezoeker wat gedaan moet worden als een XSS aanval wordt gedetecteerd. Onder normale omstandigheden is het geadviseerd om dit in te stellen op blokkeren.

De X-content-type-options header

Dit is de makkelijkste header. Er is namelijk maar één instelling. Als het gaat om communicatie tussen website en bezoeker komt het aan op verschillende soorten content typen. Zo heb je "Stylesheet", "Script", "Document", "png" en zo gaat het nog wel even door. Elke soort content heeft zijn eigen bestands-extensie, zo maakt "Stylesheet" gebruik van het bestand .css.

Met wat originele benamingen is het echter mogelijk om verwarring te creëren tussen website en bezoeker. Stel we nemen een bestand genaamd Voorbeeld.css.js. De website zal zeggen "Het bestand eindigt op JS dus is het een Script", in dit voorbeeld is dit correct.
De browser kan echter zeggen "Er staat CSS in de bestandsnaam dus is het een Stylesheet", in dit voorbeeld is dit incorrect. Ondertussen is hierdoor een conflict ontstaan tussen website en browser.

Dit conflict kan weggewerkt worden door de X-content-type-options header. Deze header geeft namelijk aan dat hetgeen wat de website zegt leidend is. In andere woorden, de website heeft altijd gelijk.
Je kan deze header het beste altijd gebruiken om er zeker van te zijn dat er geen conflicten kunnen optreden.

Hoe kan ik deze server headers instellen?

Je kunt onderstaande code kopiëren en plakken in je .htaccess bestand voor Apache of je vhost bestand voor NGINX.
Let op dat je de juiste code kopiëert.
Controleer de instellingen van deze server headers zelf, de onderstaande voorbeelden zijn standaard instellingen. Dit betekent niet dat de onderstaande voorbeelden goed werken voor jouw website.

#Header configuratie voor Apache
<IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
	Header always set X-Frame-Options "SAMEORIGIN"
        Header always set X-XSS-Protection "1; mode=block"
	Header always set X-Content-Type-Options: nosniff
</IfModule>
#Header configuratie voor NGINX
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;

Belangrijk om te weten

Goede website beveiliging is voor elke website net anders. Elke website is anders en het vereist nou eenmaal wat moeite om het goed te doen. Er is helaas niet één antwoord op de vraag hoe je je website moet beveiligen.
Als je alle tips in deze lijst hebt behandeld dan ben je zeker goed op weg. Maar blijf bezig met je website en de beveiliging van je website. Het internet veranderd continu en dat betekent dat je mee moet veranderen. Als je niet veranderd wordt het makkelijker voor hackers.
En daar zit natuurlijk niemand op te wachten.

Deel dit verhaal

Sluit Menu
2 Shares
Share via
Copy link