Met een HSTS (HTTP Strict Transport Security) header kan je een https:// verbinding afdwingen voor jouw website via de browser. Dit kan ook afgedwongen worden via .htaccess of de vhost instellingen van de server. Het grote voordeel van de HSTS header is dat de browser het kan onthouden. Dus de volgende keer dat je de website weer bezoekt, weet de browser dat de website https:// ondersteund.
Hoelang de browser het moet onthouden geef je op in de max-age parameter in seconden. Een HSTS beschermd tegen man in the middle aanvallen. Met de parameter includeSubDomains geef je aan dat alle subdomeinen ook verplicht via https:// bezocht moeten worden. Dit kan achterwege gelaten worden.
Je kan via hstspreload.org ook testen of de HSTS header voor je website correct is ingesteld. Als dat zo is kan je de website toe laten voegen aan de HSTS lijst. Deze lijst wordt verstuurd aan browsers zodat zij al weten, voordat de website ooit bezocht is, dat deze bezocht moet worden via https://. Houd er wel rekening mee dat de max-age parameter aangeeft hoelang je minimaal op deze lijst blijft staan. Op hstspreload.org lees je hier meer over.
Om een HSTS header in te stellen via WordPress zijn er 3 oplossingen:
- Voeg een PHP functie toe aan het functions.php bestand van je thema die de header instelt
- Voeg een dropin plugin, met PHP functie, toe aan WordPress die de header instelt
- Installeer een plugin die de header instelt
Oplossing 1:
Dit is de beste oplossing. Een eis is dat je een child theme hebt wanneer je een thema gekocht of gedownload hebt. Voldoe je aan deze eis? Plaats dan het onderstaande stukje code in je functions.php bestand.
<?php function add_hsts_header() { // Set the validity of the header, 6 months is a good starting point. $ageInSeconds = 31536000; // Render the header. header( 'Strict-Transport-Security: max-age=' . $ageInSeconds . '; includeSubDomains;' ); } add_action( 'send_headers', 'add_hsts_header' ); ?>
Oplossing 2:
Heb je het thema gekocht of gedownload en heb je geen child theme? Dan is dit de beste oplossing. Als je namelijk het thema bijwerkt naar een nieuwe versie gaan je wijzigingen uit oplossing 1 verloren. Kopieer de onderstaande code naar een bestand en noem dat bijvoorbeeld hstsheader.php. Plaats dit bestand vervolgens in wp-content/plugins/.
<?php /** Plugin Name: HSTS header Plugin URI: Description: Add a HSTS header to the theme templates to enable HTTP Strict Transport Security. Check https://hstspreload.org/ for more information. Author: Tim de Hoog Version: 1.0 Author URI: https://www.timdehoog.nl */ function add_hsts_header() { // Set the validity of the header, 6 months is a good starting point. $ageInSeconds = 31536000; // Render the header. header( 'Strict-Transport-Security: max-age=' . $ageInSeconds . '; includeSubDomains;' ); } add_action( 'send_headers', 'add_hsts_header' ); ?>
Oplossing 3:
Deze is eigenlijk vergelijkbaar met oplossing 2. Alleen gebruiken we nu geen eigen dropin plugin maar installeren we een bestaande. Deze kan je installeren vanuit de Plugin pagina in de wp-admin omgeving. Voor mensen met weinig programmeer ervaring is dit de beste oplossing. Bekijk deze pagina voor een aantal mogelijke plugins.
Hallo Tim,
Bedankt voor deze informatie.
Ik heb echter een vraag voor je ter verduidelijking.
Je geeft aan: “Kopieer de onderstaande code naar een bestand en noem dat bijvoorbeeld hstsheader.php. Vergeet niet dat het bestand moet beginnen met <?php."
Het is mij niet duidelijk wat je bedoelt met "Vergeet niet dat het bestand moet beginnen met <?php".
Moet dit voor de naam of in het bestand?
Met vriendelijke groet, Jaap Smit
Dat moet bovenaan het bestand staan. Hiermee geef je aan dat je de programmeertaal PHP wilt uitvoeren. Verder mag er niets op deze regel staan.
Tim,
Bedankt.
Mijn tip is om dit op te nemen in de inhoud van dit bestand.
Dan is deze toevoeging niet nodig.
Met vriendelijke groet, Jaap
Bedankt voor de feedback. Met mijn vorige plugin om PHP code in een blog te tonen was dit niet mogelijk. Dit komt omdat je PHP code wilt tonen in een pagina die ook PHP code bevat.
Mijn huidige “SyntaxHighlighter” plugin ondersteund dit wel. Ik heb daarom de PHP scripts aangepast zodat ook getoond worden.
Dit blog kan ook nog interessant zijn: https://www.timdehoog.nl/2018/07/30/security-headers-toevoegen-aan-een-wordpress-thema/