HTTP-Konfiguration

Übersicht der Konfigurationsoptionen für Nette HTTP.

Wenn Sie nicht das gesamte Framework, sondern nur diese Bibliothek verwenden, lesen Sie, wie die Konfiguration geladen wird.

HTTP-Header

http:
	# Header, die mit jeder Anfrage gesendet werden
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# beeinflusst den X-Frame-Options Header
	frames: ...      # (string|bool) Standard ist 'SAMEORIGIN'

Das Framework sendet aus Sicherheitsgründen den Header X-Frame-Options: SAMEORIGIN, der besagt, dass die Seite nur dann innerhalb einer anderen Seite (im <iframe>-Element) angezeigt werden kann, wenn sie sich auf derselben Domain befindet. Dies kann in einigen Situationen unerwünscht sein (z. B. wenn Sie eine Anwendung für Facebook entwickeln), das Verhalten kann daher durch Setzen von frames: http://allowed-host.com oder frames: true geändert werden.

Content Security Policy

Die Header Content-Security-Policy (im Folgenden CSP) können einfach zusammengestellt werden, ihre Beschreibung finden Sie in der CSP-Beschreibung. CSP-Direktiven (wie z. B. script-src) können entweder als Strings gemäß der Spezifikation oder als Arrays von Werten zur besseren Lesbarkeit geschrieben werden. Dann ist es nicht notwendig, Schlüsselwörter wie 'self' in Anführungszeichen zu setzen. Nette generiert auch automatisch den nonce-Wert, sodass im Header zum Beispiel 'nonce-y4PopTLM==' steht.

http:
	# Content Security Policy
	csp:
		# String im Format gemäß der CSP-Spezifikation
		default-src: "'self' https://example.com"

		# Array von Werten
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool im Falle von Schaltern
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Verwenden Sie in Templates <script n:nonce>...</script> und der Nonce-Wert wird automatisch ergänzt. Sichere Websites in Nette zu erstellen ist wirklich einfach.

Ähnlich können auch die Header Content-Security-Policy-Report-Only (die parallel zu CSP verwendet werden können) und Feature Policy zusammengestellt werden:

http:
	# Content Security Policy Report-Only
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Die Standardwerte einiger Parameter der Methode Nette\Http\Response::setCookie() und der Session können geändert werden.

http:
	# Cookie-Gültigkeitsbereich nach Pfad
	cookiePath: ...          # (string) Standard ist '/'

	# Domains, die Cookies akzeptieren
	cookieDomain: 'example.com'  # (string|domain) Standard ist nicht gesetzt

	# Cookies nur über HTTPS senden?
	cookieSecure: ...        # (bool|auto) Standard ist auto

	# Deaktiviert das Senden des Cookies, das Nette als Schutz vor CSRF verwendet
	disableNetteCookie: ...  # (bool) Standard ist false

Das Attribut cookieDomain bestimmt, welche Domains Cookies akzeptieren können. Wenn es nicht angegeben ist, akzeptiert die gleiche (Sub-)Domain, die das Cookie gesetzt hat, aber nicht ihre Subdomains, das Cookie. Wenn cookieDomain angegeben ist, sind auch Subdomains enthalten. Daher ist die Angabe von cookieDomain weniger restriktiv als das Weglassen.

Zum Beispiel sind bei cookieDomain: nette.org Cookies auch auf allen Subdomains wie doc.nette.org verfügbar. Dasselbe kann auch mit dem speziellen Wert domain erreicht werden, also cookieDomain: domain.

Der Standardwert auto für das Attribut cookieSecure bedeutet, dass, wenn die Website über HTTPS läuft, Cookies mit dem Secure-Flag gesendet werden und somit nur über HTTPS verfügbar sind.

HTTP-Proxy

Wenn die Website hinter einem HTTP-Proxy läuft, geben Sie dessen IP-Adresse an, damit die Erkennung der Verbindung über HTTPS und auch die IP-Adresse des Clients korrekt funktionieren. Das heißt, damit die Funktionen Nette\Http\Request::getRemoteAddress() und isSecured() die korrekten Werte zurückgeben und in Templates Links mit dem https:-Protokoll generiert werden.

http:
	# IP-Adresse, Bereich (z.B. 127.0.0.1/8) oder Array dieser Werte
	proxy: 127.0.0.1       # (string|string[]) Standard ist nicht gesetzt

Session

Grundlegende Einstellungen für Sitzungen:

session:
	# Session-Panel in der Tracy Bar anzeigen?
	debugger: ...        # (bool) Standard ist false

	# Inaktivitätsdauer, nach der die Session abläuft
	expiration: 14 days  # (string) Standard ist '3 hours'

	# Wann soll die Session gestartet werden?
	autoStart: ...       # (smart|always|never) Standard ist 'smart'

	# Handler, Dienst, der das SessionHandlerInterface implementiert
	handler: @handlerService

Die Option autoStart steuert, wann die Session gestartet werden soll. Der Wert always bedeutet, dass die Session immer beim Start der Anwendung gestartet wird. Der Wert smart bedeutet, dass die Session beim Start der Anwendung nur dann gestartet wird, wenn sie bereits existiert, oder in dem Moment, in dem wir daraus lesen oder hineinschreiben möchten. Und schließlich verbietet der Wert never den automatischen Start der Session.

Weiterhin können alle PHP Session-Direktiven (im CamelCase-Format) sowie readAndClose eingestellt werden. Beispiel:

session:
	# 'session.name' schreiben wir als 'name'
	name: MYID

	# 'session.save_path' schreiben wir als 'savePath'
	savePath: "%tempDir%/sessions"

Das Session-Cookie wird mit denselben Parametern wie andere Cookies gesendet, aber diese können für es geändert werden:

session:
	# Domains, die Cookies akzeptieren
	cookieDomain: 'example.com'   # (string|domain)

	# Einschränkung beim Zugriff von einer anderen Domain
	cookieSamesite: None          # (Strict|Lax|None) Standard ist Lax

Das Attribut cookieSamesite beeinflusst, ob das Cookie beim Zugriff von einer anderen Domain gesendet wird, was einen gewissen Schutz vor Angriffen durch Cross-Site Request Forgery (CSRF) bietet.

DI-Dienste

Diese Dienste werden dem DI-Container hinzugefügt:

Name Typ Beschreibung
http.request Nette\Http\Request HTTP-Anfrage
http.response Nette\Http\Response HTTP-Antwort
session.session Nette\Http\Session Session-Verwaltung
Version: 4.0