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