Beveiliging van WordPress: HTTPOnly en HSTS

Beveiliging WordPress HSTSHet beveiligen van een WordPress website (zoals besproken in het eBoek Website Maken met WordPress) is erg belangrijk. Naast plugins kun je de website extra veilig maken middels een aantal instellingen in het bestand .htaccess. In het eBoek wordt al aangegeven: beveiliging van WordPress is geen keuze maar een must.

Deze instellingen kun je eenvoudig aanpassen via de Filemanager van DirectAdmin of een ander controlpanel. Een andere optie is om dit via een FTP-programma te doen. Deze instellingen kun je ook voor andere websites gebruiken!

Wat is .htaccess?

.htaccess is een configuratiebestand. Je kunt er bepaalde instellingen mee aanpassen die het gedrag van je website beïnvloeden.

WordPress zelf heeft een standaard .htaccess bestand. In dit bestand, dat in je hoofdmap van de website staat, is het gedeelte voor WordPress duidelijk gemarkeerd:

# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Pas deze instellingen tussen de #-tags (die een commentaar markeren) niet aan. WordPress heeft ze nodig om goed te kunnen werken.

Het .htaccess bestand is een tekstbestand. Met “regels” in het bestand vertel je aan de server, waar je website op wordt gehost, hoe er omgegaan moet worden met de data-aanvraag van de browser van de bezoeker van je site.

Opvallend is de afwijkende naamgeving: .htaccess. De naam .htaccess is een afkorting die staat voor “HyperText Access”. De punt aan het begin van de bestandsnaam zorgt dat het een verborgen bestand is.

Beveiliging van WordPress

Zonder heel erg in detail te treden: het onderstaande stukje kun je kopieëren en plakken, direct in het begin, in je .htaccess.

HTTPOnly

Het eerste gedeelte zorg er voor dat de cookies van de website, mits je die gebruikt, alleen toegankelijk zijn voor de server.

Het belangrijkste voordeel hiervan is dat het cross-site scripting (XSS, een methode om je website aan te vallen) voorkomen wordt. Dit voorkomt bijvoorbeeld verzoeken van kwaadaardige JavaScript-bestanden die cookies proberen te stelen.

Bijna elke WordPress website gebruikt cookies. Gravatar, standaard in WordPress actief, statistieken via Google en andere instellingen gebruiken cookies.

Header set Strict-Transport-Security (HSTS)

HSTS werd in 2012 gespecificeerd. Het zorgt er voor dat de browser gedwongen wordt een beveiligde verbinding te gebruiken wanneer een website SSL (HTTPS-verbinding) gebruikt.. Het is een beveiligingsheader die u toevoegt en het vertelt dus aan uw webserver “alleen via HTTPS!”.

Deze optie is alleen nuttig als u gebruik maakt van een SSL-certificaat en uw website een beveiligde verbinding heeft. Een noodzaak tegenwoordig want veel browsers geven een waarschuwing als een website géén gebruik maakt van HTTPS. De meeste hostingbedrijven leveren tegenwoordig gratis SSL-certificaten van Let’s Encrypt of u kunt voor zo’n tien tot vijftien euro per jaar een certificaat aanschaffen.

Websites worden als ‘onveilig’ gemarkeerd door de meeste browsers als er géén SSL/HTTPS verbinding is. En dat kan natuurlijk niet de bedoeling zijn.

Beveiliging via .htaccess

Kopieëren (klik op de code) en plakken van onderstaande code in de .htaccess van uw website voegt HTTPOnly en HSTS toe aan uw website zodra u het opgeslagen hebt. Er wordt dus wel uitgegaan van gebruik van SSL voor uw website! Gebruikt u dat niet, dan is het zaak dit éérst te regelen.

## SECURITY ##
<ifModule mod_headers.c>
Header edit Set-Cookie ^(.*)$ "$1; HTTPOnly"
Header edit Set-Cookie ^(.*)$ "$1; Secure"
Header always set Strict-Transport-Security: "max-age=31536000" env=HTTPS
Header always set Content-Security-Policy "upgrade-insecure-requests"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Expect-CT "max-age=7776000, enforce"
Header always set Referrer-Policy: "no-referrer-when-downgrade"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
</IfModule>
## EINDE SECURITY ##

Meer weten over dit onderwerp? Kijk op de developerssite van Mozilla.