Deze handleiding is een aanvulling op onze andere handleidingen waarbij we dieper ingaan op de beveiliging van jouw website of webshop.
Let op: met een aantal van deze opties kan de werking van jouw website negatief beïnvloed worden, dus altijd goed testen!
De meeste van deze stappen voeren we allemaal door in het .htaccess-bestand. Als dit niet het geval is zal dit apart vermeld worden.
Daarnaast worden steeds de volgende regels gebruikt: <IfModule mod_headers.c> en </IfModule>
Deze hoef je maar één keer te plaatsen, je kan dus steeds de dikgedrukte cursieve regel tussen de 2 bovenstaande regels zetten.
Referrer-Policy
Met de referrer-policy kunnen we aangeven welke informatie er moet worden meegegeven als er van jouw site wordt doorgelinkt naar een andere site: denk hierbij aan het domein, of de exacte pagina waarvan jij naar die andere site linkt. Dit is voor webmasters een handig gegeven in bijvoorbeeld Google Analytics om de bron van hun verkeer te kunnen zien.
Ons advies is om ervoor te zorgen dat er in onveilige situaties zo min mogelijk informatie over jouw site wordt prijsgegeven: bijvoorbeeld als bezoekers van jouw HTTPS-website worden gelinkt naar een site die geen HTTPS gebruikt.
Hiervoor kan je de volgende instelling gebruiken:
#Referrer-Policy
<ifModule mod_header.c>
Header set Referrer-Policy "same-origin"
</ifModule>
Strict-Transport-Security
Strict Transport Security (ook wel HSTS) is een aanvullende maatregel die je kan instellen om HTTPS-websites te beschermen tegen specifieke aanvallen.
Voor het instellen van de Strict-Transport-Security headers hebben wij een aparte handleiding: Forceren van hsts in .htaccess
X-Frame-Options
WordPress gebruikers opgelet: Als je gebruik maakt van WordPress kan je deze optie beter achterwege laten, de customizer in de wp-admin kan ongewenst gedrag gaan vertonen!
Met de X-Frame header kun je aangeven of jouw website via een iFrame geladen mag worden. Een iFrame is eigenlijk een simpel script, waarin jouw gehele pagina getoond wordt.
Zo lijkt het voor bezoekers alsof ze op jouw website zitten, maar eigenlijk zitten ze nog steeds op de website van de aanvaller: hierdoor kan de aanvaller dus weer allerlei kwaadaardige scripts toevoegen aan wat er geladen wordt, terwijl jouw website getoond wordt.
IFrames worden maar zeer beperkt gebruikt, dus vaak kan je deze header vrij strict instellen door de optie “SAMEORIGIN” te gebruiken. Dit zorgt ervoor dat alleen pagina’s binnen jouw eigen domein jouw website in een iFrame mogen tonen.
Gebruik hiervoor de volgende regels:
# Set security headers
<IfModule mod_headers.c>
Header always set X-Frame-Options “SAMEORIGIN”
</IfModule>
Content-Type-Options
De volgende security-optie is de X-Content-type-Options header. Hiermee wordt aangegeven aan browsers dat de Content-Type header die de server meegeeft niet gevolgd moet worden en niet gewijzigd mag worden.
In bepaalde type aanvallen kan het voorkomen dat de server een bestand met MIME-type tekst/html naar de browser stuurt, maar dat de browser er een uitvoerbaar MIME-type van maakt en het script uitvoert. Hierdoor lijkt er voor de bezoeker een tekstbestand gedownload te worden, maar op de achtergrond wordt er een virus gedownload.
Door het instellen van de X-Content-Type-Options header, kunnen we dit risico verkleinen.
# Set security headers
<IfModule mod_headers.c>
Header always set X-Content-Type-Options “nosniff”
</IfModule>
Feature-Policy
Op het moment van schrijven (07-2020) is dit mechanisme nog in een experimentele staat. Aan de werking kunnen dus nog wijzigingen plaatsvinden! De allerlaatste informatie is te vinden op de mozilla developer website:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
Met een Feature-Policy kun je aangeven welke features jouw website gebruikt, en dus actief mogen zijn. Dit komt zowel de compatibiliteit met browsers als veiligheid van bezoekers ten goede. Enkele voorbeelden hiervan zijn:
- Het standaard gedrag van AutoPlay op mobiele apparaten en bij third party filmpjes (embedded in jouw site) bepalen;
- Voorkomen dat (kwaadaardige) scripts die ingeladen worden op jouw website de microfoon of camera op het apparaat van jouw bezoekers activeren en hier gebruik van maken.
- Je wilt weten wanneer er niet geoptimaliseerde afbeeldingen op jouw website geplaatst worden (aan deze functie wordt nog gewerkt door de grotere browsers).
Dit zijn de features die we op moment van schrijven kunnen beheren:
Accelerometer, ambient-light-sensor, autoplay (voor media), camera, display-capture, encrypted-media, fullscreen, gyroscope , magnetometer, microphone, midi, navigation-override, payment, sync-xhr, usb, unoptimized-images en wake-lock.
Helaas geldt hier niet dat je alles uit kan schakelen, en vervolgens één optie weer kan inschakelen: mochten er nieuwe opties toegevoegd worden, zoals bijvoorbeeld het laden van afbeeldingen, dan kan dit als gevolg hebben dat een basisfunctie van jouw website na een browser update niet meer werkt. Hierdoor moeten we voor alle opties waar we iets mee willen, onze voorkeur aangeven.
In theorie zou je dus de hele feature lijst kunnen uitschakelen, en als volgt verwerken:
<IfModule mod_headers.c>
Header always set Feature-Policy “camera ‘self’; geolocation ‘self’; microphone ‘self’; fullscreen ‘self’; autoplay ‘none’”
</IfModule>
In dit voorbeeld mogen alleen de pagina’s van jouw eigen website gebruik maken van de camera, geolocation (GPS), de microfoon en fullscreen geopend worden.
De header is als volgt opgebouwd:
Feature-policy: <naam feature> <toegestane bron>; <naam feature2> <toegestane bron>
Als bronnen kunnen de volgende opties gebruikt worden:
*: staat voor de huidige pagina en alle onderliggende “contexts”, zoals iframes en embeds
‘self’: de huidige pagina, zelfde als de eerder genoemde “same-origin”
‘none’: niemand, niks
<origin(s)>: Specifieke bronnen, zoals http://jouwdomein.nl, https://facebook.com
Om terug te komen op de eerdere voorbeelden: om het automatisch afspelen van bijvoorbeeld embedded filmpjes te weigeren, maar filmpjes van jouw site wel toe te staan, kun je het volgende toepassen:
# Set security headers
<IfModule mod_headers.c>
Header always set Feature-Policy “autoplay ‘self’”
</IfModule>
Als je de microfoon van jouw bezoeker niet wenst te gebruiken kun je het volgende toepassen:
# Set security headers
<IfModule mod_headers.c>
Header always set Feature-Policy “autoplay ‘none’”
</IfModule>
Toch nog vragen? Maak een ticket aan of mail naar support@elaxxl.nl