Bij het maken van een website komt er veel meer kijken dan slechts het ontwerpen en ontwikkelen van een mooie en functionele site. Doordat WordPress steeds populairder wordt, wordt het aantrekkelijk voor hackers om je website te exploiteren door beveiligingslekken te vinden en te misbruiken.
In dit artikel ga ik het hebben over het .htaccess
bestand, en bekijken we een aantal snippets die je helpen om jouw website te beveiligen.
#Wat is het WordPress .htaccess bestand?
Een .htaccess
bestand is een optioneel configuratie bestand. Dit bestand is een samenstelling van modules, die ervoor zorgen dat je website de correcte functionaliteit heeft. Middels het .htaccess
bestand kun je dus bepaalde configuratie waardes overschrijven die standaard door de webserver ingesteld zijn.
Als je er bijvoorbeeld voor kiest om een aangepaste URL structuur te maken voor permalinks in het WordPress dashboard, zal de .htaccess
file automatisch worden aangepast met de benodigde ‘rewrite rules’.
Je kunt dus verschillende instellingen in dit configuratie bestand opslaan, zoals o.a. het blokkeren van IP adressen, zorgen dat een bestand of map niet publiekelijk toegankelijk is, het met een wachtwoord beschermen van een directory, browser caching aanzetten, enz.
#Waar vind je het .htaccess bestand?
De .htaccess
file is terug te vinden in de ‘root’ van de FTP-server. Dit is de hoofdmap waarin alle bestanden van je website worden opgeslagen. Om deze hoofdmap te vinden, heb je een FTP-programma (bijv. FileZilla) nodig, waarmee je verbinding kunt maken met jouw FTP-server.
De meeste webhosting bedrijven leveren ook een online file manager waarmee je de inhoud van de .htaccess
file ook zelf kunt aanpassen.
#HTTP-headers om je website te beveiligen
Hackers kunnen vele verschillende methoden gebruiken om persoonlijke gegevens te stelen. Eén van de bekendste methoden om bepaalde informatie te achterhalen, is Cross-Site Scripting (XSS).
Bij Cross-Site Scripting injecteert een hacker kwaadaardige code (JavaScript) in een browser of in een kwetsbare website of webapplicatie. Deze aanvallen laten je gebruikers openstaan voor cookie diefstal, informatie diefstal, account kaping, clickjacking en meer.
Moderne webbrowsers hebben tegenwoordig een krachtige beveiliging ingebouwd, maar je moet de browser vertellen dat je die beveiligingsmechanismen voor je website wilt gebruiken. Dit kan worden geactiveerd door specifieke HTTP-headers in te stellen in je .htaccess
bestand.
#X-Frame-Options
De HTTP-header van X-Frame-Options
kan worden gebruikt om aan te geven of een browser al dan niet toestemming moet hebben om een pagina in een <frame>
of <iframe>
weer te geven. Dit kan worden gebruikt om clickjacking aanvallen te voorkomen door ervoor te zorgen dat jouw inhoud niet is ingesloten in andere sites.
Door in onderstaande code de richtlijn op DENY
in te stellen, wordt er voorkomen dat onze pagina’s in frames worden weergegeven, zelfs vanaf onze eigen website.
# Don't allow any pages to be framed - Defends against CSRF Header set X-Frame-Options SAMEORIGIN
#X-XSS-Protection
Deze HTTP-header is exclusief voor Internet Explorer 8 en 9, het schakelt een cross-site scripting-beveiliging in, die standaard is uitgeschakeld omdat het mogelijk sommige websites zou kunnen breken. Gebruik onderstaande header om het XSS-filter in te schakelen.
# Turn on IE8-IE9 XSS prevention tools Header set X-XSS-Protection "1; mode=block"
#X-Content-Security-Policy
Content Security Policy (CSP) is een extra beveiligingslaag die helpt bij het detecteren en verminderen van bepaalde soorten aanvallen, waaronder Cross Site Scripting (XSS) en data-injectie aanvallen. Deze aanvallen worden voor van alles gebruikt, van gegevensdiefstal tot beschadiging van de site of verspreiding van malware.
Deze richtlijn instellen op "allow 'self';"
zal voorkomen dat onze pagina’s extern JavaScript laden of inline JavaScript uitvoeren. Onze website zal veiliger zijn tegen XSS-aanvallen omdat het voor een aanvaller moeilijker wordt om JavaScript in de browser van de bezoeker uit te voeren via een ingeframe
de pagina op onze website of via een SQL-injectie.
Er zijn veel instellingen beschikbaar voor deze HTTP-header maar ik raad je aan om de Mozilla Wiki-pagina te lezen voordat je CSP gebruikt, omdat je bepaalde externe inhoud moet toestaan als je bijv. Google Adsense gebruikt.
# Only allow JavaScript from the same domain to be run. # Don't allow inline JavaScript to run. Header set X-Content-Security-Policy "allow 'self';"
#X-Content-Type-Options: nosniff
Deze HTTP header voorkomt “content sniffing (ook wel MIME-sniffing genoemd)” in Internet Explorer. Elke website laadt bestanden, deze bestanden (content) zijn altijd van een bepaald type (MIME-type). Content sniffing houdt meestal in dat een browser wordt misleid om een script uit te voeren dat is vermomd als een ander bestandstype.
Als jouw site bijvoorbeeld gebruikers toestaat afbeeldingen te uploaden en te delen, kan een aanvaller mogelijk een speciaal vervaardigd afbeeldingsbestand uploaden dat JavaScript code bevat. Een browser die content ‘snifft’, kan dan worden misleid om het schadelijke bestand uit te voeren.
Om content-sniffing aanvallen te verminderen, stel je de response header X-Content-Type-Options
in op nosniff
. Deze HTTP header instrueert de browser om het response content type niet te negeren. Dus als de server zegt dat de inhoud tekst / html is, zal de browser deze ook weergeven als tekst / html.
# prevent mime based attacks Header set X-Content-Type-Options "nosniff"
#HTTP Strict Transport Security header
Als een website een verbinding via HTTP accepteert en omleidt naar HTTPS, kunnen bezoekers in eerste instantie communiceren met de niet-gecodeerde versie van de site voordat ze worden omgeleid. Dit creëert een kans voor een man-in-the-middle aanval. De omleiding kan worden gebruikt om bezoekers naar een kwaadaardige site te leiden in plaats van naar de beveiligde versie van de oorspronkelijke site.
De HTTP Strict-Transport-Security
header informeert de browser dat deze nooit een site met HTTP mag laden en in plaats daarvan alle pogingen om toegang tot de site via HTTP te krijgen, automatisch moet converteren naar HTTPS-verzoeken.
# Enable HTTP Strict Transport Security (HSTS) Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
#Beveilig je wp-config.php bestand
In het wp-config.php
bestand staat gevoelige informatie, zoals de database naam en toegangsgegevens en daarom is het belangrijk om deze zo veel mogelijk te beschermen tegen hackers. Onderstaande regels blokkeren in feite de toegang tot jouw wp-config.php
file tegen hacking en code aanpassingen.
# Protect wp-config.php file <Files wp-config.php> order allow, deny deny from all </Files>
#Blokkeer Directory Browsing
Directory Browsing wordt gebruikt door hackers om er achter te komen welke mappen en bestanden op je hostingserver staan. Het is daarom een groot veiligheidsrisico. Plaats onderstaande code in je .htaccess
bestand om directory browsing uit te schakelen.
# disable directory browsing Options All -Indexes
#Beveilig het .htaccess bestand
And last but not least .. uiteraard is het ook raadzaam om de .htaccess
file ook te beveiligen, want via het .htaccess
bestand kunnen hackers ook invloed uitoefenen op je website! Het is daarom belangrijk dat deze niet ingezien kan worden, of kan worden aangepast.
Voeg hiervoor onderaan je .htaccess
de volgende regels toe:
# protect .htaccess <Files ~ "^.*\.([Hh][Tt][Aa])"> Order allow,deny Deny from all Satisfy all </Files>
Bottom-line:
Er is op het internet nogal wat commotie over het .htaccess
bestand en of dit bestand nog niet overbodig is. Hoewel alles vanuit het .htaccess
bestand ook op andere manieren te regelen is zorgt het .htaccess
bestand ervoor dat gebruikers (zeker op shared hosting servers) vrijheid krijgen in de manier waarom hun website / domein omgaat met aanvragen naar de webserver.
Maar je .htaccess
bestand is ook handig voor het beveiligen van je WordPress website. Wil je meer weten over het beveiligen van je WordPress website, neem dan contact met mij op.
Nog Geen Reacties
Sorry, maar het is niet (meer) mogelijk te reageren op dit artikel.