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
Cookie HTTP
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"
Cookie di sessione
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 |