Configurazione HTTP

Panoramica delle opzioni di configurazione per Nette HTTP.

Se non utilizzate l'intero framework, ma solo questa libreria, leggete come caricare la configurazione.

Header HTTP

http:
	# header che vengono inviati con ogni request
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# influisce sull'header X-Frame-Options
	frames: ...      # (string|bool) il default è 'SAMEORIGIN'

Per motivi di sicurezza, il framework invia l'header X-Frame-Options: SAMEORIGIN, che indica che la pagina può essere visualizzata all'interno di un'altra pagina (nell'elemento <iframe>) solo se si trova sullo stesso dominio. Questo può essere indesiderato in alcune situazioni (ad esempio, se state sviluppando un'applicazione per Facebook), quindi il comportamento può essere modificato impostando frames: http://allowed-host.com o frames: true.

Content Security Policy

È facile costruire gli header Content-Security-Policy (di seguito CSP), la cui descrizione si trova nella descrizione CSP. Le direttive CSP (come script-src) possono essere scritte sia come stringhe secondo la specifica, sia come array di valori per una migliore leggibilità. In tal caso, non è necessario racchiudere tra virgolette le parole chiave come 'self'. Nette genera anche automaticamente il valore nonce, quindi nell'header ci sarà ad esempio 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# stringa nel formato secondo la specifica CSP
		default-src: "'self' https://example.com"

		# array di valori
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool nel caso di switch
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Nei template, usate <script n:nonce>...</script> e il valore nonce verrà aggiunto automaticamente. Creare siti web sicuri in Nette è davvero facile.

Allo stesso modo, è possibile costruire gli header Content-Security-Policy-Report-Only (che possono essere utilizzati contemporaneamente a CSP) e Feature Policy:

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

È possibile modificare i valori predefiniti di alcuni parametri del metodo Nette\Http\Response::setCookie() e della sessione.

http:
	# scope del cookie per percorso
	cookiePath: ...          # (string) il default è '/'

	# domini che accettano i cookie
	cookieDomain: 'example.com'  # (string|domain) il default è non impostato

	# inviare i cookie solo tramite HTTPS?
	cookieSecure: ...        # (bool|auto) il default è auto

	# disabilita l'invio del cookie usato da Nette per la protezione CSRF
	disableNetteCookie: ...  # (bool) il default è false

L'attributo cookieDomain specifica quali domini possono accettare il cookie. Se non specificato, il cookie viene accettato dallo stesso (sotto)dominio che lo ha impostato, ma non dai suoi sottodomini. Se cookieDomain è specificato, vengono inclusi anche i sottodomini. Pertanto, specificare cookieDomain è meno restrittivo che ometterlo.

Ad esempio, con cookieDomain: nette.org, i cookie sono disponibili anche su tutti i sottodomini come doc.nette.org. Lo stesso si può ottenere anche con il valore speciale domain, cioè cookieDomain: domain.

Il valore predefinito auto per l'attributo cookieSecure significa che se il sito web viene eseguito su HTTPS, i cookie verranno inviati con il flag Secure e quindi saranno disponibili solo tramite HTTPS.

Proxy HTTP

Se il sito web viene eseguito dietro un proxy HTTP, specificare il suo indirizzo IP affinché il rilevamento della connessione tramite HTTPS e l'indirizzo IP del client funzionino correttamente. Cioè, affinché le funzioni Nette\Http\Request::getRemoteAddress() e isSecured() restituiscano i valori corretti e nei template vengano generati link con il protocollo https:.

http:
	# Indirizzo IP, intervallo (es. 127.0.0.1/8) o array di questi valori
	proxy: 127.0.0.1       # (string|string[]) il default è non impostato

Sessione

Impostazioni di base delle sessioni:

session:
	# visualizzare il pannello della sessione nella Tracy Bar?
	debugger: ...        # (bool) il default è false

	# periodo di inattività dopo il quale la sessione scade
	expiration: 14 days  # (string) il default è '3 hours'

	# quando deve iniziare la sessione?
	autoStart: ...       # (smart|always|never) il default è 'smart'

	# handler, servizio che implementa l'interfaccia SessionHandlerInterface
	handler: @handlerService

L'opzione autoStart controlla quando deve iniziare la sessione. Il valore always significa che la sessione si avvierà sempre all'avvio dell'applicazione. Il valore smart significa che la sessione si avvierà all'avvio dell'applicazione solo se esiste già, o nel momento in cui vogliamo leggere o scrivere dati in essa. Infine, il valore never disabilita l'avvio automatico della sessione.

Inoltre, è possibile impostare tutte le direttive di sessione PHP (in formato camelCase) e anche readAndClose. Esempio:

session:
	# 'session.name' lo scriviamo come 'name'
	name: MYID

	# 'session.save_path' lo scriviamo come 'savePath'
	savePath: "%tempDir%/sessions"

Il cookie di sessione viene inviato con gli stessi parametri degli altri cookie, ma è possibile modificarli per esso:

session:
	# domini che accettano i cookie
	cookieDomain: 'example.com'   # (string|domain)

	# restrizione sull'accesso da un altro dominio
	cookieSamesite: None          # (Strict|Lax|None) il default è Lax

L'attributo cookieSamesite influisce sul fatto che il cookie venga inviato durante l'accesso da un altro dominio, il che fornisce una certa protezione contro gli attacchi Cross-Site Request Forgery (CSRF).

Servizi DI

Questi servizi vengono aggiunti al container DI:

Nome Tipo Descrizione
http.request Nette\Http\Request HTTP request
http.response Nette\Http\Response HTTP response
session.session Nette\Http\Session gestione delle sessioni
versione: 4.0