Next revision | Previous revision |
de:2.0:serversecurity [2025/02/06 20:39] – created hilo73 | de:2.0:serversecurity [2025/02/07 15:28] (current) – hilo73 |
---|
====== Security Header einsetzen ====== | ====== 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. | Security Header sind ein sehr wichtiges Tool, um die Sicherheit auf Websites zu erhöhen. |
• und hier ein super Vortrag vom CCC zum Thema: https://youtu.be/xbPK6ux9C7o?si=9vw-YGDran_Dhn0w | • und hier ein super Vortrag vom CCC zum Thema: https://youtu.be/xbPK6ux9C7o?si=9vw-YGDran_Dhn0w |
| |
===== Eigenen Server testen ===== | ==== 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. | 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 einsetzen ===== | ==== .htaccess-Einträge setzen (Apache) ==== |
| |
Für Admidio sollten grundlegende Einstellungen in der .htaccess gesetzt werden um eine gewisse Sicherheit zu erreichen und den Anwender zu unterstützen. | 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. | 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. |
| |
<code> | <code> |
<IfModule mod_headers.c> | <IfModule mod_headers.c> |
| ## https://scotthelme.co.uk/hsts-the-missing-link-in-tls/ |
Header always set strict-transport-security "max-age=31536000; includeSubDomains" | 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" | 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" | 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" | 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" | 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" | 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=()" | 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' ; | 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 besser einstellt | ## wenn es Probleme gibt, kann der Header Content-Security-Policy auskommentiert werden. Besser ist aber, zu schauen, wo man die Parameter besser einstellt |
</IfModule> | </IfModule> |
</code> | </code> |
| |
| ==== 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. |
| |
| <code> |
| ## Beispiel einer nginx.conf |
| add_header strict-transport-security "max-age=31536000; includeSubDomains"; |
| .... |
| </code> |