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

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-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
versiune: 4.0