HSTS header toevoegen aan WordPress voor https://

3 mei 2018 om 22:24

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:

  1. Voeg een PHP functie toe aan het functions.php bestand van je thema die de header instelt
  2. Voeg een dropin plugin, met PHP functie, toe aan WordPress die de header instelt
  3. 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.

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. Vergeet niet dat het bestand moet beginnen met <?php. Plaats dit bestand vervolgens in wp-content/plugins/.

/**
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: httpw://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.