Configurazione HTTP

Panoramica delle opzioni di configurazione di Nette HTTP.

Se non usate tutto il framework, ma solo questa libreria, leggete come caricare la configurazione.

Header HTTP

http:
	# header inviati con ogni risposta
	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|null) predefinito 'SAMEORIGIN'

Per motivi di sicurezza il framework invia l'header X-Frame-Options: SAMEORIGIN, che dice che una pagina può essere mostrata dentro un'altra pagina (in un elemento <iframe>) solo se si trova sullo stesso dominio. In alcune situazioni questo può essere indesiderato (per esempio se state sviluppando un'applicazione per Facebook), quindi il comportamento si può cambiare impostando frames: http://allowed-host.com per consentire un host specifico, frames: true per consentire l'inserimento in frame da qualsiasi parte (l'header viene omesso) oppure frames: false per vietarlo del tutto (X-Frame-Options: DENY).

Per impostazione predefinita Nette invia anche gli header X-Powered-By: Nette Framework 3 e Content-Type: text/html; charset=utf-8. Potete rimuovere qualsiasi header, compresi questi predefiniti, impostandone il valore a una stringa vuota.

Content Security Policy

Gli header Content-Security-Policy (CSP) si configurano facilmente; la loro descrizione la trovate nella specifica CSP. Le direttive CSP (per esempio script-src) si possono scrivere come stringhe secondo la specifica oppure come array di valori, per una migliore leggibilità. In tal caso non serve mettere le virgolette attorno a parole chiave come 'self'. Nette genererà automaticamente anche il valore nonce, quindi nell'header verrà inviato per esempio 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# stringa 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 degli interruttori
		upgrade-insecure-requests: true
		block-all-mixed-content: false

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

Allo stesso modo si configurano gli header Content-Security-Policy-Report-Only (che si possono usare insieme alla CSP) e la 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

Potete cambiare i valori predefiniti di alcuni parametri del metodo Nette\Http\Response::setCookie() e della gestione delle sessioni.

http:
	# ambito del cookie secondo il percorso
	cookiePath: ...          # (string) predefinito '/'

	# domini che possono ricevere il cookie
	cookieDomain: 'example.com'  # (string|domain) predefinito non impostato

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

	# disattiva l'invio del cookie che Nette usa per la protezione CSRF
	disableNetteCookie: ...  # (bool) predefinito false

L'attributo cookieDomain determina quali domini (origini) possono accettare i cookie. Se non è indicato, il cookie viene accettato dallo stesso (sotto)dominio che lo ha impostato, escluse le sue sottodomini. Se cookieDomain è indicato, sono compresi anche i sottodomini. Indicare cookieDomain è quindi meno restrittivo che ometterlo.

Se per esempio è impostato cookieDomain: nette.org, i cookie sono disponibili anche su tutti i sottodomini come doc.nette.org. Lo stesso si ottiene con il valore speciale domain, cioè cookieDomain: domain.

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

Proxy HTTP

Se il sito gira dietro a un proxy HTTP, indicate l'indirizzo IP del proxy perché il rilevamento della connessione HTTPS e l'indirizzo IP del client funzionino correttamente. Cioè perché Nette\Http\Request::getRemoteAddress() e isSecured() restituiscano i valori corretti e nei template i link vengano generati con il protocollo https:.

http:
	# indirizzo IP, intervallo (per esempio 127.0.0.1/8) oppure un array di questi valori
	proxy: 127.0.0.1       # (string|string[]) predefinito non impostato

Forzare HTTPS

Forza incondizionatamente lo schema della richiesta a HTTPS. Torna utile per i siti solo HTTPS che girano dietro a un load balancer o a un reverse proxy che termina il TLS ma non passa l'header X-Forwarded-Proto, così che il consueto rilevamento di HTTPS (anche con il Proxy HTTP configurato) non lo intercetterebbe.

http:
	# forza lo schema HTTPS per tutte le richieste
	forceHttps: true       # (bool) predefinito false

Sessione

Impostazioni di base delle sessioni:

session:
	# mostrare il pannello della sessione nella Tracy Bar?
	debugger: ...        # (bool) predefinito false

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

	# quando deve avviarsi la sessione?
	autoStart: ...       # (smart|always|never) predefinito 'smart'

	# handler, un servizio che implementa SessionHandlerInterface
	handler: @handlerService

L'opzione autoStart governa quando la sessione deve avviarsi. Il valore always significa che la sessione si avvia sempre all'avvio dell'applicazione. Il valore smart significa che la sessione si avvia con l'applicazione solo se esiste già, oppure nel momento in cui vogliamo leggerla o scriverla. Infine il valore never disattiva l'avvio automatico della sessione.

Potete inoltre impostare tutte le direttive di sessione di PHP (in formato camelCase) e anche readAndClose. Esempio:

session:
	# 'session.name' si scrive come 'name'
	name: MYID

	# 'session.save_path' si scrive come 'savePath'
	savePath: "%tempDir%/sessions"

Il cookie di sessione viene inviato con gli stessi parametri degli altri cookie, ma potete cambiarli specificamente per esso:

session:
	# domini che possono ricevere il cookie
	cookieDomain: 'example.com'   # (string|domain)

	# limitazione per l'accesso cross-origin
	cookieSamesite: None          # (Strict|Lax|None) predefinito Lax

L'attributo cookieSamesite influisce sul fatto che il cookie venga inviato con le richieste cross-origin, il che offre una certa protezione contro gli attacchi Cross-Site Request Forgery (CSRF).

Servizi DI

Al container DI vengono aggiunti questi servizi:

Nome Tipo Descrizione
http.request Nette\Http\Request richiesta HTTP
http.response Nette\Http\Response risposta HTTP
session.session Nette\Http\Session gestione delle sessioni
http.requestFactory Nette\Http\RequestFactory factory che crea la richiesta HTTP
versione: 4.x