Zum Hauptinhalt springen

Header

Allgemein

Header spielen eine wichtige Rolle bei der Sicherheit und helfen dabei, die Angriffsfläche verschiedener Angriffstypen auf eine Webanwendung zu reduzieren.

Diese Header werden in den meisten modernen Webanwendungen verwendet, da sie einen grundlegenden Schutz gegen die häufigsten Schwachstellen bieten.

Passwork Docker Build

Allgemeine Sicherheitsheader werden über die include-Direktive in der Hauptkonfigurationsdatei von Nginx eingebunden und sind in der Datei extra/security-headers.conf definiert. Der Strict-Transport-Security-Header wird direkt in der Hauptkonfigurationsdatei gesetzt und gilt somit für die gesamte Website.

HeaderWert
X-Frame-Options"DENY"
X-Content-Type-Options"nosniff"
X-XSS-Protection"1; mode=block"
Referrer-Policy"strict-origin-when-cross-origin"
Permissions-Policy"camera=(), microphone=(), geolocation=()"
Strict-Transport-Security"max-age=31536000; includeSubDomains"

Apache2\HTTPD

Allgemeine Header sind in der Datei public/.htaccess enthalten. Sie werden automatisch angewendet, vorausgesetzt, die Verarbeitung der .htaccess-Datei wurde in der Apache-Konfiguration nicht deaktiviert. Der Strict-Transport-Security-Header ist in den Konfigurationsbeispielen der Installationsanleitung angegeben.

HeaderWert
X-Frame-Options"DENY"
X-Content-Type-Options"nosniff"
X-XSS-Protection"1; mode=block"
Referrer-Policy"strict-origin-when-cross-origin"
Permissions-Policy"camera=(), microphone=(), geolocation=()"
Strict-Transport-Security"max-age=31536000; includeSubDomains"

X-Frame-Options — Definiert, ob die Seite in einem Frame, iFrame oder Objekt geladen werden kann.

X-Content-Type-Options — Verhindert, dass Browser versuchen, den Inhaltstyp zu erraten.

X-XSS-Protection — Aktiviert (oder deaktiviert) den integrierten XSS-Schutz in älteren Browserversionen. Veraltet, kann aber aus Kompatibilitätsgründen verwendet werden.

Referrer-Policy — Definiert, welche Informationen der Browser im Referer-Header sendet.

Permissions-Policy — Ermöglicht die Einschränkung der Nutzung verschiedener Funktionen, zum Beispiel: Zugriff auf Kamera, Mikrofon, Geolokalisierung und andere APIs.

Strict-Transport-Security — Informiert den Browser, dass die Website nur über HTTPS geladen werden muss, und verhindert Downgrade- und MITM-Angriffe.

Cross-Origin Resource Sharing

CORS-Header regulieren den Zugriff auf Website-Ressourcen von anderen Domains.

info

In den meisten Fällen ist das Ändern oder Hinzufügen von CORS-Headern nicht erforderlich. Sie werden nur benötigt, wenn Frontend und Backend auf verschiedenen Origins gehostet werden — das heißt, sich in Domain, Port oder Protokoll unterscheiden.

Passwork Docker Build

CORS-Header werden über die include-Direktive in der Hauptkonfigurationsdatei von Nginx eingebunden und sind in der Datei extra/cors.conf definiert.

HeaderWert
Access-Control-Allow-Origin"*"
Access-Control-Allow-Methods"GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE"
Access-Control-Allow-Headers"Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token"
Access-Control-Max-Age"1728000"
Vary"Origin"

Apache2\HTTPD

CORS-Header werden standardmäßig nicht gesetzt. Bei Bedarf können sie explizit in der Apache2-Virtual-Host-Konfiguration gesetzt werden, innerhalb eines <Directory>-Blocks oder global für den gesamten Virtual Host.

HeaderWert
Access-Control-Allow-Origin"*"
Access-Control-Allow-Methods"GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE"
Access-Control-Allow-Headers"Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token"
Access-Control-Max-Age"1728000"
Vary"Origin"

Access-Control-Allow-Origin — Gibt an, welche Domains Anfragen an die Ressource stellen dürfen. Unterstützt folgende Werte:

  • Anfragen von beliebigen Domains erlaubt — *
  • Exakter Wert, Schema + Domain — https://example.com

Die Angabe mehrerer Domains, getrennt durch Kommas, wird vom CORS-Standard nicht unterstützt und führt zu einem Fehler! Die Verwendung mehrerer Domains und andere dynamische Szenarien werden auf Webserver-Ebene implementiert:

Docker Build

Ersetzen Sie die folgende Zeile in der Konfigurationsdatei ./conf/nginx/extra/cors.conf durch die untenstehenden Zeilen, wobei Sie Ihre eigenen Domains oder ein anderes Muster angeben:

add_header Access-Control-Allow-Origin "*" always;
if ($http_origin ~* ^https?://(example\.com|another\.com)$) {
add_header Access-Control-Allow-Origin "$http_origin" always;
add_header Access-Control-Allow-Credentials "true" always;
}

Apache2/HTTPD

Fügen Sie den folgenden Block zur Virtual-Host-Konfigurationsdatei hinzu:

<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(example\.com|another\.com)$" ORIGIN_ALLOWED=$0
Header always set Access-Control-Allow-Origin "%{ORIGIN_ALLOWED}e" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Credentials "true" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Headers "Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token" env=ORIGIN_ALLOWED
Header always set Access-Control-Max-Age "1728000" env=ORIGIN_ALLOWED
Header always set Vary "Origin" env=ORIGIN_ALLOWED
</IfModule>

Access-Control-Allow-Methods — Definiert, welche HTTP-Methoden für domainübergreifende Anfragen erlaubt sind.

Access-Control-Allow-Headers — Gibt an, welche Header in domainübergreifenden Anfragen gesendet werden können.

Access-Control-Max-Age — Zeit (in Sekunden), während der das Ergebnis einer Preflight-Anfrage vom Browser zwischengespeichert werden kann, um sie nicht jedes Mal erneut durchzuführen.

Vary — Im Kontext von CORS wird dies für die korrekte Anfragenverarbeitung auf CDNs und Proxys verwendet. Ermöglicht die korrekte Verarbeitung verschiedener Origin-Anfragen und deren separate Zwischenspeicherung.