Bij het beveiligen van je website zijn er veel aspecten waar je rekening mee moet houden. De HTTP security headers zijn hierbij wellicht een goed beginpunt. Deze zijn makkelijk in te stellen en hebben maar een kleine aanpassing nodig in de serverinstellingen.
Wat zijn HTTP Security Headers eigenlijk?
Wanneer je een website bezoekt geeft de webserver jou een mix van onder andere content en HTTP response headers. In deze response headers staan allerlei instellingen waarmee tegen de browser verteld wordt hoe die met de content van de website moet omgaan. Er kan bijvoorbeeld ingesteld worden dat er alleen over HTTPS gecommuniceerd mag worden.
De HTTP Security Headers
Hieronder volgen een aantal HTTP Security Headers die makkelijk toe te passen zijn. Al deze voorbeelden zijn bedoeld om in de htaccess toegevoegd te worden. Dit is dan op een linux-omgeving, ik ga er vanuit dat dit door de meeste mensen gebruikt wordt. Voor Windows en Nginx wordt dit artikel later nog uitgebreid.
Verder, het instellen van deze headers ging bij mij zonder problemen. Mocht jij nu wel bij het toevoegen van één van deze regels een probleem ondervinden dan kan je dit makkelijk terugdraaien door gewoon de regel uit de .htacces te verwijderen.
X-Frame-Options
De X-Frame-Options zorgt er voor dat website niet via een iframe op een andere website gebruikt kan worden. Een mogelijk veiligheidsprobleem kan zijn dat er dan over je website heen een laag gelegd wordt waarbij over de knoppen van jouw pagina andere knoppen overheen worden geplaatst die andere functies hebben en dus problemen kunnen veroorzaken.
Header always set X-Frame-Options "SAMEORIGIN"
X-Xss-Protection
De X-Xss-Protection zorgt er voor dat de ingebouwde beveiliging in de browser ingesteld wordt. Deze kan uitgeschakeld worden (0) of ingeschakeld worden (1). Ook kan er ingesteld worden dat de browser de reactie blokkeert als het een aanval detecteert (1; mode=block).
Header always set X-Xss-Protection "1; mode=block"
X-Content-Type-Options
De X-Content-Type-Options zorgt er voor dat voorkomen wordt dat de browser een bestand "bekijkt" anders dan die die door de server gesteld wordt. Simpel gezegd, er wordt een afbeelding geüpload, in de code van dit bestand staat dan image/jpg vermeld. Maar nu wordt er een bestand met de extensie .jpg geupload dat eigenlijk een php-script is. De browser zou normaal dit bestand bekijken en daarmee de code in dit bestand kunnen uitvoeren. Met de "nosniff" optie mag de browser bestanden niet meer bekijken en wordt dit gevaar dus voorkomen.
Header always set X-Content-Type-Options "nosniff"
HTTP Strict Transport Security (HSTS)
De HTTP Strict Transport Security (HSTS) zorgt er voor dat de browsers de website alleen nog maar via HTTPS mogen/kunnen benaderen. Dit verzekert dat er geen verbinding via het onveiligere HTTP gelegd kan worden. Dit is eigenlijk de enige regel waarbij wel uitgekeken moet worden want als iemand deze regel al een keer in de browser heeft ontvangen zal die pas na de tijdsduur aangepast kunnen worden. Dus terugval naar HTTP is tot dan toe normaal niet mogelijk.
Er is een optie om ook subdomeinen automatisch mee te laten nemen, maar het is aan te raden om dit per subdomein te regelen. Want het kan natuurlijk voorkomen dat je een simpele pagina in een subdomein maakt waarbij HTTPS helemaal niet nodig is. En op deze manier heb je dat in eigen hand.
Header set Strict-Transport-Security "max-age=31536000"
Referrer Policy
De Referrer Policy zorgt er voor dat er ingesteld kan worden welke gegevens meegestuurd worden wanneer men op een uitgaande link klikt, dus een link waarmee je naar een andere website gaat.
Header set Referrer-Policy "no-referrer-when-downgrade"
Verder zijn er nog twee instellingen die interessant zijn.
Het verwijderen van de PHP versie van de server doe je met de onderstaande code:
Header unset X-Powered-By
Het verwijderen van de serverinformatie doe je met de volgende code:
ServerSignature Off
Om het makkelijk te maken, om alle regels toe te voegen aan je .htaccess kan je het volgende blok kopieren en in het bestand plakken.
## Extra Security Headers
#
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
Header set Referrer-Policy "no-referrer-when-downgrade"
Header set Strict-Transport-Security "max-age=31536000"
Header unset X-Powered-By
ServerSignature Off
#
Voetnoot
Ik heb deze headers ontdekt door een gesprek met Wilco tijdens de Joomladagen 2017. Na ongeveer 9 maanden een tabblad in de browser op mijn telefoon open gehad te hebben kwam ik er eindelijk aan toe om hiermee aan de slag te gaan. Eerste bron die ik gebruikt is is https://securityheaders.io/, die is een website waarmee je je headers kan controleren. Ook de doorverwijzingen naar de website van de ontwikkelaar van deze website heb ik gebruikt, hier is veel informatie te vinden. Een aanrader om regelmatig te bezoeken, https://scotthelme.co.uk/
Verder volgt hier nog een (aantal) link waarop nog meer informatie te vinden is.