Configurarea HTTP

Prezentare generală a opțiunilor de configurare pentru Nette HTTP.

Dacă nu utilizați întregul cadru, ci doar această bibliotecă, citiți cum se încarcă configurația.

Antetele HTTP

http:
	# antetele 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) valoarea implicită este "SAMEORIGIN".

Din motive de securitate, framework-ul trimite un antet X-Frame-Options: SAMEORIGIN, care spune că o pagină poate fi afișată în interiorul altei pagini (în elementul <iframe>) numai dacă aceasta se află pe același domeniu. Acest lucru poate fi nedorit în anumite situații (de exemplu, dacă dezvoltați o aplicație Facebook), astfel încât comportamentul poate fi modificat prin setarea cadrelor frames: http://allowed-host.com.

Politica de securitate a conținutului

Headers Content-Security-Policy (denumită în continuare CSP) poate fi asamblată cu ușurință, iar descrierea acestora poate fi găsită în descrierea CSP. Directivele CSP (cum ar fi script-src) pot fi scrise fie sub formă de șiruri de caractere, în conformitate cu specificațiile, fie sub formă de matrice de valori pentru o mai bună lizibilitate. În acest caz, nu este nevoie să se scrie ghilimele în jurul cuvintelor cheie, cum ar fi 'self'. De asemenea, Nette va genera automat o valoare de nonce, astfel încât 'nonce-y4PopTLM==' va fi trimis în antet.

http:
	# Politica de securitate a conținutului
	csp:
		# șir de caractere în conformitate cu specificația CSP
		default-src: "'self' https://example.com"

		# matrice de valori
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool în cazul comutatoarelor
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Utilizați <script n:nonce>...</script> în șabloane, iar valoarea nonce va fi completată automat. Realizarea de site-uri web securizate în Nette este foarte ușoară.

În mod similar, pot fi adăugate antetele Content-Security-Policy-Report-Only (care poate fi utilizat în paralel cu CSP) și Feature Policy:

http:
	# Raport privind politica de securitate a conținutului
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Politica privind caracteristicile
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Puteți modifica valorile implicite ale unor parametri din metodele Nette\Http\Response::setCookie() și session.

http:
	# domeniul de aplicare al cookie-urilor în funcție de cale
	cookiePath: ...          # (șir de caractere) valoarea implicită este "/

	# ce gazde sunt autorizate să primească cookie-ul
	cookieDomain: 'example.com'  # (șir|domeniu) implicit la unset

	# pentru a trimite cookie-uri numai prin HTTPS?
	cookieSecure: ...        # (bool|auto) valoarea implicită este auto

	# dezactivează trimiterea cookie-ului pe care Nette îl folosește ca protecție împotriva CSRF
	disableNetteCookie: ...  # (bool) are valoarea implicită false

Opțiunea cookieDomain determină domeniile (originile) care pot accepta cookie-uri. Dacă nu este specificată, cookie-ul este acceptat de același (sub)domeniu ca și cel stabilit de acesta, excluzând subdomeniile acestora. Dacă se specifică cookieDomain, atunci sunt incluse și subdomeniile. Prin urmare, specificarea cookieDomain este mai puțin restrictivă decât omiterea.

De exemplu, dacă este setat cookieDomain: nette.org, cookie-ul este, de asemenea, disponibil pe toate subdomeniile ca doc.nette.org. Acest lucru poate fi realizat și cu valoarea specială domain, adică cookieDomain: domain.

Valoarea implicită a cookieSecure este auto, ceea ce înseamnă că, dacă site-ul web rulează pe HTTPS, cookie-urile vor fi trimise cu steagul Secure și, prin urmare, vor fi disponibile numai prin HTTPS.

Proxy HTTP

Dacă site-ul rulează în spatele unui proxy HTTP, introduceți adresa IP a proxy-ului pentru ca detectarea conexiunilor HTTPS să funcționeze corect, precum și adresa IP a clientului. Adică, pentru ca Nette\Http\Request::getRemoteAddress() și isSecured() să returneze valorile corecte și pentru ca legăturile să fie generate cu protocolul https: în șabloane.

http:
	# Adresa IP, interval (de exemplu, 127.0.0.1/8) sau o serie de aceste valori
	proxy: 127.0.0.1       # (string|string[]) valoarea implicită este niciuna

Sesiunea

Setări de bază pentru sesiuni:

session:
	# arată panoul de sesiune în Tracy Bar?
	debugger: ...        # (bool) valoarea implicită este false

	# timpul de inactivitate după care expiră sesiunea
	expiration: 14 days  # (string) valoarea implicită este "3 ore

	# când să înceapă sesiunea?
	autoStart: ...       # (smart|always|never) valoarea implicită este "smart".

	# handler, serviciu care implementează interfața SessionHandlerInterface
	handler: @handlerService

Opțiunea autoStart controlează momentul în care începe sesiunea. Valoarea always înseamnă că sesiunea este întotdeauna inițiată la pornirea aplicației. Valoarea smart înseamnă că sesiunea va fi pornită la pornirea aplicației numai dacă există deja sau în momentul în care dorim să citim sau să scriem în ea. În cele din urmă, valoarea never dezactivează pornirea automată a sesiunii.

De asemenea, puteți seta toate directivele de sesiune PHP (în format camelCase) și, de asemenea, readAndClose. Exemplu:

session:
	# 'session.name' scris ca 'name'
	name: MYID

	# 'session.save_path' scris ca 'savePath'
	savePath: "%tempDir%/sessions"

Cookie-ul de sesiune este trimis cu aceiași parametri ca și celelalte cookie-uri, dar îi puteți modifica:

session:
	# ce gazde sunt autorizate să primească cookie-ul
	cookieDomain: 'example.com'   # (șir|domeniu)

	# restricții la accesarea unei cereri de origine încrucișată
	cookieSamesite: None          # (Strict|Lax|None) valoarea implicită este Lax

Opțiunea cookieSamesite influențează dacă cookie-ul este trimis în cazul cererilor cu origine înc rucișată, ceea ce oferă o anumită protecție împotriva atacurilor de falsificare a cererilor încrucișate pe site (Cross-Site Request Forgery).

Servicii DI

Aceste servicii sunt adăugate la containerul DI:

Nume | Tip | 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