Server absichern
Für einen sicheren Betrieb ist es immer ratsam, die aktuellen Software-Versionen auf seinem Server einzusetzen. Wer ein Hosting-Paket nutzt, kann sich in der Regel auf die Updates seines Betreibers verlassen, wer eigene Server betreibt sollte unbedingt auf Aktualität achten.
Sofern Apache als Webserver eingesetzt wird, ist es möglich, durch die .htaccess-Datei im Hauptverzeichnis die Konfiguration des Servers anzupassen. Bei nginx-Servern, muss die Datei /etc/nginx/nginx.conf oder die je nach Website vorhandene Konfiguration unter /etc/nginx/sites-available/ bearbeitet werden.
Security Header einsetzen
Security Header sind ein sehr wichtiges Tool, um die Sicherheit auf Websites zu erhöhen.
Hier dazu zwei umfangreiche Artikel, die die Hintergründe und Zielsetzung gut erklären: * https://www.tutkit.com/de/blog/200-security-headers-fuer-deine-website-gut-fuer-sicherheit-und-seo • https://kulturbanause.de/blog/http-security-header/ • und hier ein super Vortrag vom CCC zum Thema: https://youtu.be/xbPK6ux9C7o?si=9vw-YGDran_Dhn0w
Eigenen Server und Website testen
Unter https://securityheaders.com/ oder https://observatory.mozilla.org könnt ihr auch eure eigene Seite testen und bekommt eine Auswertung, welche Header aktiv sind und welche nicht. Beide Seiten haben etwas unterschiedliche Kriterien zur Bewertung, aber es sind alle Einstellung umfangreich dokumentiert und mit Anwendungsbeispielen bzw. Empfehlungen versehen. Die ganzen Optionen muss man halt wirklich für seine eigenen Bedürfnisse anpassen und passen nicht immer für jede Website gleich gut.
.htaccess-Einträge setzen (Apache)
Für Admidio sollten grundlegende Einstellungen in der .htaccess gesetzt werden um einen möglichst hohen Sicherheitsgrad zu erreichen, da auch Vereinsdaten durch Angriffsszenarien in Gefahr sein können. Vor Allem die Einstellungen des Headers “Content-Security-Policy” wirken sehr empfindlich auf die Funktionalität. Skripte, CSS, Bilder usw sind davon betroffen. Aber sie sind auch sehr mächtig, um die eigene Seite zu sichern. Hier hilft die Chrome-Entwickler-Konsole ehr gut weiter wenn die Einstellungen zu restriktiv waren.
Die Beispiel-.htaccess enthält Einträge der Security Header, die für Admidio so laufen und einen guten Kompromiss zwischen Sicherheit und Funktionalität bieten. Damit erhält man eine A, bzw. B+-Bewertung bei den beiden oben genannten Prüfungstools.
<IfModule mod_headers.c> ## https://scotthelme.co.uk/hsts-the-missing-link-in-tls/ Header always set strict-transport-security "max-age=31536000; includeSubDomains" ## https://scotthelme.co.uk/hardening-your-http-response-headers/#x-xss-protection Header always set X-XSS-Protection "1; mode=block" ## https://scotthelme.co.uk/hardening-your-http-response-headers/#x-frame-options Header always set X-Frame-Options "SAMEORIGIN" ## https://scotthelme.co.uk/hardening-your-http-response-headers/#x-content-type-options Header always set X-Content-Type-Options "nosniff" ## https://scotthelme.co.uk/a-new-security-header-referrer-policy/ Header always set Referrer-Policy "strict-origin-when-cross-origin" ## https://scotthelme.co.uk/coop-and-coep/ Header always set Cross-Origin-Resource-Policy "same-origin" ## https://scotthelme.co.uk/goodbye-feature-policy-and-hello-permissions-policy/ Header always set Permissions-Policy "accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), gamepad=(), hid=(), idle-detection=(), interest-cohort=(), serial=()" ## https://scotthelme.co.uk/content-security-policy-an-introduction/ Header always set Content-Security-Policy "default-src 'none'; script-src 'self' 'unsafe-inline'; img-src 'self' data: ; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; object-src 'none'; form-action 'self' ; ## wenn es Probleme gibt, kann der Header Content-Security-Policy auskommentiert werden. Besser ist aber, zu schauen, wo man die Parameter besser einstellt </IfModule>
nginx.conf-Einträge setzen (nginx)
Für nginx muss die Schreibweise etwas verändert werden. Dort wird am Anfang “add_header” statt “Header set” verwendet, am Ende muss die Zeile mit einem Semikolon abgeschlossen werden.
## Beispiel einer nginx.conf add_header strict-transport-security "max-age=31536000; includeSubDomains"; ....