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 site te beveiligen.

Het .htaccess bestand wordt alleen gebruikt door servers die Apache gebruiken. Een Nginx server gebruikt directives in het Nginx config bestand.

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 ingeframede 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.

Deel dit Bericht:

Auteur: Jan Rajtoral

Jan Rajtoral is een ervaren grafische vormgever en webdesigner. Hij heeft een ruime ervaring met Front-end web design (HTML, CSS en JS/jQuery), User Experience (UX), Toegankelijkheid (WCAG), Performance en WordPress Ontwikkeling & Thema Ontwerp. Maar hij ontwerpt en ontwikkelt ook logo’s en huisstijlen, waarbij hij altijd streeft naar merkconsistentie in het hele ontwerp.