Vimexx Facebook

Hoe kan ik Security Headers instellen voor mijn website?

Bijgewerkt op 27-06-2019

Wanneer je jouw site goed wilt beveiligen tegen zaken als XSS (Cross Site Scripting) exploits en vele andere manieren waarop hackers kunnen inbreken op je site, dan is een goede methode hiervoor het gebruik van Security Headers. Dit zijn extra beveiligingsregels die restricties opleggen aan de manier waarop een client jouw site kan gebruiken.

De meeste regels kan je gewoon rechtstreeks overnemen vanuit deze handleiding. Enkele zijn wat gecompliceerder en moet je samenstellen zodat ze werken bij jouw website.

  1. HSTS inschakelen
  2. Headers in .htaccess plaatsen
  3. Content-Security-Policy samenstellen en toevoegen
  4. Feature-Policy samenstellen en toevoegen

1. HSTS inschakelen

Allereerst gaan we HSTS inschakelen. Dit is een header die meegestuurd wordt, die bezoekers verplicht om gebruik te maken van een versleutelde verbindingen. Hierdoor is het onmogelijk om nog zonder SSL te verbinden met jouw website. Dit voorkomt dus dat er per ongeluk informatie gelekt kan worden naar derden. Wel kan het voor problemen zorgen als je geen SSL certificaat geïnstalleerd hebt!

 

2. Headers in .htaccess plaatsen

Als HSTS is ingesteld, gaan we regels in de .htaccess toevoegen.
Vrijwel iedere site zal standaard al een .htaccess bestand hebben, deze vind je in:

/domains/VOORBEELD.NL/public_html/.htaccess

Als dit bestand nog niet bestaat, kan je deze gewoon aanmaken. Als deze al wel bestaat, kan je de bestaande .htaccess bewerken.
Dit doe je in de File Manager van DirectAdmin, door op Edit te klikken naast het bestand.

Voeg bovenaan het bestand de volgende regels toe:

<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "no-referrer-when-downgrade"
</IfModule>

Als je niet goed weet wat je doet, is het handig om hier de wijzigingen op te slaan en niet verder te gaan.
Mocht je enig idee hebben van wat de bovenstaande regels doen, dan kan je de volgende twee stappen ook nog uitvoeren voor extra beveiliging.

 

3. Content-Security-Policy samenstellen en toevoegen

We gaan nu de zogeheten Content-Security-Policy samenstellen.

Dit is een restrictie regel waarmee je vanaf beperkte bronnen data toestaat om op je site gebruikt te worden. Deze regel kan tussen dezelfde <IfModule> regels geplaatst worden als de eerdere header regels.

Je plaatst jouw bronnen toe, tussen aanhalingstekens, na:

Header set Content-Security-Policy

Hier kan je bijvoorbeeld definiëren waar je scripts vandaan mogen komen. Stel dat je deze slechts vanaf je site wilt gebruiken, maar wel wilt toestaan dat ze "inline" in je site script mogen staan, dan kan je dit doen door te typen:

Header set Content-Security-Policy "default-src *;script-src 'self' 'unsafe-inline'"

Wanneer een regel niet gedefinieerd wordt, valt deze terug op default-src.
Hieronder de meest voorkomende content regels die je kunt definiëren:

default-src  |  De fallback regel, wanneer iets niet gedefinieerd is
font-src  |  Bronnen van je fonts
frame-src  |  <frame> en <iframe> elementen
img-src  |  Bronnen voor favicons en afbeeldingen
media-src  |  <audio>, <video> en <track> elementen
object-src  |  <object>, <embed> en <applet> elementen (probeer deze op 'none' te houden)
script-src  |  JavaScript bronnen
style-src  |  Bronnen met stijlconfiguraties (CSS)

De regels die je voor je bronnen kunt instellen zijn als volgt:

*  |  Staat alles toe (wildcard)
data:  |  Staat Base64 encoded media toe
voorbeeld.nl  |  Staat content van de genoemde URL toe (kan ook als http://voorbeeld.nl of *.voorbeeld.nl)
https:  | Enkel vanaf https bronnen
'self'  |  Moet binnen dezelfde host staan
'unsafe-inline'  |  Voor het definiëren van een stijl of thema binnen het script van de site
'unsafe-eval'  |  Staat onveilige dynamische code interpretaties (eval()) toe (vermijdt gebruik!)
'nonce-X'  |  Voegt een nonce controle toe, bijv. nonce-5431b3a53d staat enkel scripts toe wanneer deze beginnen met <script nonce="5431b3a53d"
'none'  |  Van geen enkele source toegestaan

Wat voor jouw website genoeg, maar niet teveel beveiliging zal zijn, kunnen we je helaas niet vooraf vertellen. Dat zal je zelf moeten uitzoeken/uittesten. Je zult zien dat bij teveel restricties enkele functies of onderdelen zullen wegvallen.

 

4. Feature-Policy samenstellen en toevoegen

Op eenzelfde manier als de CSP kan je ook een Feature-Policy samenstellen. Dit is gelukkig iets gemakkelijker en betreft geen bronnen, maar browser functies.

Je kunt functies toestaan of beperken door deze op dezelfde plaats in je .htaccess te plaatsen, achter:

Header set Feature-Policy

Een voorbeeld van een veelvoorkomende restrictie is de volgende:

Header set Feature-Policy "autoplay 'none'; camera 'none'; encrypted-media 'self'; fullscreen 'self'; geolocation 'none'; microphone 'none'; midi 'none'; payment 'none'; vr 'none'"

Hiermee weiger je vrijwel alle functies die niet strikt noodzakelijk zijn voor het functioneren van je website!
Je kunt hier dezelfde regels gebruiken als bij het definiëren van je CSP regeling.

Heeft deze handleiding je goed geholpen?
- 5 van 5 sterren -