In functions.php (safe inline liefst niet ivm veiligheid) (updated)

function wbmz_security_headers( $headers ) {  
// Alleen uitvoeren op de frontend en niet in de admin. Ook niet als de gebruiker is ingelogd.
if(!is_admin() || !is_user_logged_in()):    
  // wordt gebruikt voor de HSTS header om te bepalen hoelang HTTPS geldig is.
  $ageInSeconds = 2592000;   
  $headers['X-XSS-Protection'] = '1; mode=block';    
  // De website mag alleen in een iframe getoond worden op de eigen website (voorkomt clickbaiting/clickjacking).
  $headers['X-Frame-Options'] = 'SAMEORIGIN';    
  // Geen MIME types veranderen (voorkomt XSS/cross site scripting attack).
  $headers['X-Content-Type-Options'] = 'nosniff';    
  // Sta standaard style en scripts toe van de eigen website maar scripts geladen van betreffende websites niet tenzij uitgezonderd.
  $headers['Content-Security-Policy'] = 'default-src * \'unsafe-inline\' \'self\' data:*; img-src https://* \'self\' data:; script-src \'self\' \'unsafe-inline\' *.fontawesome.com *.googletagmanager.com *.google-analytics.com *.googleapis.com;';    
  // Website alleen laden via HTTPS en niet downgraden (voorkomt “man in the middle attack”).
  $headers['Strict-Transport-Security'] = 'max-age=' . $ageInSeconds . '; includeSubDomains; preload';    
  // Alleen informatie meegeven van de website indien het de eigen website is of de andere website veilig (dan alleen het eerste deel).
  $headers['Referrer-Policy'] = 'strict-origin-when-cross-origin';    
  // Bepaald wat er wel en niet mag worden uitgevoerd door (de scripts op) de website.
  $headers['Permissions-Policy'] = 'execution-while-not-rendered=(self); execution-while-out-of-viewport=(self); fullscreen=(self); legacy-image-formats=(self); oversized-images=(self); sync-xhr=(self); geolocation=(self maps.googleapis.com); midi=(none); notifications=(none); push=(none); microphone=(none); camera=(none); magnetometer=(none); gyroscope=(none); speaker=(none); vibrate=(none); fullscreen=(self); payment=(none)';    
else:    
  // Geen headers en geen cache (voorkomt problemen met laden van content)
  $headers['Cache-control'] = 'no-cache, no-store';  
endif;  
return $headers;
}
add_filter( 'wp_headers', 'wbmz_security_headers' );
Geef een reactie 0