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' );
#Cache control #Content Security Policy #CSP #functions #HSTS #security