Naar de inhoud
websitecontrole.nl
Advies

Beveiliging afstemmen op Joomla

Joomla heeft sinds versie 4 een ingebouwde plugin voor security-headers, dus veel kun je zonder code aanzetten. Hieronder per bevinding waar de fix woont.

Response-headers (HSTS, clickjacking, referrer, permissions)

Joomla levert sinds versie 4 een kernplugin "Systeem - HTTP Headers". Ga naar Systeem > Plugins, zoek op "HTTP Headers", open de plugin en zet hem op Ingeschakeld. Die zet onder meer X-Frame-Options (standaard SAMEORIGIN), Referrer-Policy, Cross-Origin-Opener-Policy, HSTS (standaard uit) en Permissions-Policy. Per header kies je waar hij geldt: de site, het beheer of beide. HSTS heeft eigen velden voor max-age, subdomeinen en preload, en werkt alleen over HTTPS. X-Content-Type-Options: nosniff zit niet meer in de plugin maar in de meegeleverde htaccess.txt (zie hieronder).

Wil je het liever op de server, dan levert Joomla een htaccess.txt in de siteroot. Hernoem die naar .htaccess en voeg je regels toe. Bewerk htaccess.txt zelf niet, want een update kan die overschrijven; je .htaccess wordt bij een update niet automatisch bijgewerkt.

.htaccess (Apache), the server route if you skip the plugin
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set X-Content-Type-Options "nosniff"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "geolocation=(), camera=(), microphone=()"
</IfModule>

De Content-Security-Policy

Dezelfde "Systeem - HTTP Headers"-plugin kan een Content-Security-Policy zetten, inclusief de report-only-variant. Met third-party extensies en templates breekt een te strak beleid snel iets, dus rol hem in stappen uit:

  1. Zet de policy eerst in report-only (de Content-Security-Policy-Report-Only-header), dan breekt hij niets maar meldt hij wel wat hij zou blokkeren.
  2. Verzamel de meldingen met een tool als Sentry, Report URI of URIports, of lees ze in je browserconsole.
  3. Sta toe wat legitiem geblokkeerd wordt, tot er geen echte meldingen meer binnenkomen.
  4. Hernoem de header naar Content-Security-Policy om de policy af te dwingen.

Cookies (Secure, HttpOnly, SameSite)

De Secure-vlag komt binnen via "Forceer HTTPS" in Systeem > Globale configuratie (tab Server): die zet de sessiecookies op secure zodra HTTPS wordt afgedwongen. HttpOnly staat op de Joomla-sessiecookie aan. SameSite is sinds Joomla 4 instelbaar in de globale configuratie (waarden zoals Lax of None; None werkt alleen samen met Forceer HTTPS).

De verbinding (HTTPS afdwingen)

HTTPS afdwingen doe je in Systeem > Globale configuratie op de tab Server met "Forceer HTTPS". De opties zijn Geen, Alleen beheer en Hele site. Kies Hele site zodat elke pagina over https gaat; dit zet ook de sessiecookies op secure. Voorwaarde is een geldig certificaat op de server; dat regelt je host of CDN, niet Joomla. Zet daarna eventueel HSTS aan zodat browsers https onthouden.

DNS-records (SPF, DMARC, DNSSEC, IPv6)

Deze staan los van je site: het zijn records bij je domein. Je zet ze bij je DNS-provider of domeinregistrar, niet in je CMS of op je host. SPF en DMARC gaan over wie mail namens je domein mag sturen, DNSSEC ondertekent je DNS, en IPv6 is de enige waar de host eerst een AAAA-record en verbinding moet aanbieden voordat je die kunt zetten.

Verdieping

Advies voor een ander platform