Configurare HTTP
Prezentare generală a opțiunilor de configurare pentru Nette HTTP.
Dacă nu utilizați întregul framework, ci doar această bibliotecă, citiți cum se încarcă configurația.
Antete HTTP
http:
# antete care sunt trimise cu fiecare cerere
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# afectează antetul X-Frame-Options
frames: ... # (string|bool) implicit este 'SAMEORIGIN'
Framework-ul, din motive de securitate, trimite antetul X-Frame-Options: SAMEORIGIN
, care specifică faptul că
pagina poate fi afișată în interiorul altei pagini (în elementul <iframe>
) doar dacă se află pe același
domeniu. Acest lucru poate fi nedorit în anumite situații (de exemplu, dacă dezvoltați o aplicație pentru Facebook),
comportamentul putând fi modificat prin setarea frames: http://allowed-host.com
sau frames: true
.
Content Security Policy
Se pot construi ușor antetele Content-Security-Policy
(în continuare CSP), descrierea lor o găsiți în descrierea CSP. Directivele CSP (cum ar fi script-src
) pot fi scrise
fie ca șiruri conform specificației, fie ca array-uri de valori pentru o mai bună lizibilitate. Atunci nu este nevoie să
puneți ghilimele în jurul cuvintelor cheie, cum ar fi 'self'
. Nette generează, de asemenea, automat valoarea
nonce
, astfel încât antetul va conține, de exemplu, 'nonce-y4PopTLM=='
.
http:
# Content Security Policy
csp:
# șir în format conform specificației CSP
default-src: "'self' https://example.com"
# array de valori
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool în cazul comutatoarelor
upgrade-insecure-requests: true
block-all-mixed-content: false
În șabloane utilizați <script n:nonce>...</script>
și valoarea nonce se va completa automat.
Crearea site-urilor web sigure în Nette este într-adevăr ușoară.
Similar se pot construi și antetele Content-Security-Policy-Report-Only
(care pot fi utilizate concomitent cu
CSP) și 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
Se pot modifica valorile implicite ale unor parametri ai metodei Nette\Http\Response::setCookie() și ale sesiunii.
http:
# domeniul cookie-ului în funcție de cale
cookiePath: ... # (string) implicit este '/'
# domenii care acceptă cookie-uri
cookieDomain: 'example.com' # (string|domain) implicit este nesetat
# trimite cookie-uri doar prin HTTPS?
cookieSecure: ... # (bool|auto) implicit este auto
# dezactivează trimiterea cookie-ului utilizat de Nette pentru protecția CSRF
disableNetteCookie: ... # (bool) implicit este false
Atributul cookieDomain
specifică ce domenii pot accepta cookie-uri. Dacă nu este specificat, cookie-ul este
acceptat de același (sub)domeniu care l-a setat, dar nu și de subdomeniile sale. Dacă cookieDomain
este
specificat, sunt incluse și subdomeniile. Prin urmare, specificarea cookieDomain
este mai puțin restrictivă decât
omiterea sa.
De exemplu, cu cookieDomain: nette.org
, cookie-urile sunt disponibile și pe toate subdomeniile precum
doc.nette.org
. Același lucru se poate realiza și cu valoarea specială domain
, adică
cookieDomain: domain
.
Valoarea implicită auto
pentru atributul cookieSecure
înseamnă că, dacă site-ul rulează pe
HTTPS, cookie-urile vor fi trimise cu flag-ul Secure
și, prin urmare, vor fi disponibile doar prin HTTPS.
Proxy HTTP
Dacă site-ul rulează în spatele unui proxy HTTP, specificați adresa sa IP pentru ca detectarea conexiunii prin HTTPS și a
adresei IP a clientului să funcționeze corect. Adică, pentru ca funcțiile Nette\Http\Request::getRemoteAddress() și isSecured() să returneze valorile corecte și în șabloane să se
genereze linkuri cu protocolul https:
.
http:
# Adresă IP, interval (ex. 127.0.0.1/8) sau array cu aceste valori
proxy: 127.0.0.1 # (string|string[]) implicit este nesetat
Sesiune
Setări de bază pentru sesiuni:
session:
# afișează panoul de sesiune în Tracy Bar?
debugger: ... # (bool) implicit este false
# perioada de inactivitate după care sesiunea expiră
expiration: 14 days # (string) implicit este '3 hours'
# când ar trebui să pornească sesiunea?
autoStart: ... # (smart|always|never) implicit este 'smart'
# handler, serviciu care implementează interfața SessionHandlerInterface
handler: @handlerService
Opțiunea autoStart
controlează când trebuie să pornească sesiunea. Valoarea always
înseamnă
că sesiunea va porni întotdeauna la pornirea aplicației. Valoarea smart
înseamnă că sesiunea va porni la
începutul aplicației doar dacă există deja, sau în momentul în care dorim să citim sau să scriem în ea. Și, în final,
valoarea never
interzice pornirea automată a sesiunii.
În plus, se pot seta toate directivele de sesiune PHP (în format camelCase) și, de asemenea, readAndClose. Exemplu:
session:
# 'session.name' se scrie ca 'name'
name: MYID
# 'session.save_path' se scrie ca 'savePath'
savePath: "%tempDir%/sessions"
Cookie de sesiune
Cookie-ul de sesiune este trimis cu aceiași parametri ca alte cookie-uri, dar îi puteți modifica pentru acesta:
session:
# domenii care acceptă cookie-uri
cookieDomain: 'example.com' # (string|domain)
# restricții la accesul de pe alt domeniu
cookieSamesite: None # (Strict|Lax|None) implicit este Lax
Atributul cookieSamesite
afectează dacă cookie-ul va fi trimis la accesul de pe alt domeniu, ceea ce oferă o anumită protecție
împotriva atacurilor Cross-Site Request
Forgery (CSRF).
Servicii DI
Aceste servicii sunt adăugate în containerul DI:
Nume | Tip | Descriere |
---|---|---|
http.request |
Nette\Http\Request | Cerere HTTP |
http.response |
Nette\Http\Response | Răspuns HTTP |
session.session |
Nette\Http\Session | Gestionarea sesiunii |