HTTP konfiguráció

A Nette HTTP konfigurációs opcióinak áttekintése.

Ha nem a teljes keretrendszert használja, csak ezt a könyvtárat, olvassa el, hogyan kell betölteni a konfigurációt.

HTTP fejlécek

http:
	# fejlécek, amelyek minden kéréssel elküldésre kerülnek
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# befolyásolja az X-Frame-Options fejlécet
	frames: ...      # (string|bool) alapértelmezett 'SAMEORIGIN'

A keretrendszer biztonsági okokból elküldi az X-Frame-Options: SAMEORIGIN fejlécet, amely azt mondja, hogy az oldalt csak akkor lehet megjeleníteni egy másik oldalon belül (az <iframe> elemben), ha ugyanazon a domainen található. Ez bizonyos helyzetekben nem kívánatos lehet (például ha Facebook alkalmazást fejleszt), a viselkedés ezért megváltoztatható a frames: http://allowed-host.com vagy frames: true beállítással.

Content Security Policy

Könnyen összeállíthatók a Content-Security-Policy (továbbiakban CSP) fejlécek, leírásukat a CSP leírásában találja. A CSP direktívák (mint pl. script-src) megadhatók akár stringként a specifikáció szerint, akár értékek tömbjeként a jobb olvashatóság érdekében. Ekkor nincs szükség idézőjelek írására a kulcsszavak, mint például a 'self', köré. A Nette automatikusan generál egy nonce értéket is, így a fejlécben például 'nonce-y4PopTLM==' lesz.

http:
	# Content Security Policy
	csp:
		# string a CSP specifikáció szerinti formátumban
		default-src: "'self' https://example.com"

		# értékek tömbje
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool kapcsolók esetén
		upgrade-insecure-requests: true
		block-all-mixed-content: false

A sablonokban használja a <script n:nonce>...</script>-et, és a nonce érték automatikusan kiegészül. Biztonságos webhelyek készítése a Nette-ben valóban egyszerű.

Hasonlóan összeállíthatók a Content-Security-Policy-Report-Only (amelyek a CSP-vel párhuzamosan használhatók) és a Feature Policy fejlécek is:

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

Megváltoztathatók a Nette\Http\Response::setCookie() metódus és a session egyes paramétereinek alapértelmezett értékei.

http:
	# cookie hatóköre útvonal szerint
	cookiePath: ...          # (string) alapértelmezett '/'

	# domainek, amelyek elfogadják a cookie-t
	cookieDomain: 'example.com'  # (string|domain) alapértelmezett nincs beállítva

	# csak HTTPS-en keresztül küldeni a cookie-t?
	cookieSecure: ...        # (bool|auto) alapértelmezett auto

	# kikapcsolja a Nette által CSRF védelemként használt cookie küldését
	disableNetteCookie: ...  # (bool) alapértelmezett false

A cookieDomain attribútum meghatározza, mely domainek fogadhatják el a cookie-t. Ha nincs megadva, a cookie-t ugyanaz a (sub)domain fogadja el, amelyik beállította, de nem annak aldomainjei. Ha a cookieDomain meg van adva, az aldomainek is beletartoznak. Ezért a cookieDomain megadása kevésbé korlátozó, mint annak elhagyása.

Például a cookieDomain: nette.org esetén a cookie-k minden aldomainen, mint például a doc.nette.org, is elérhetők. Ugyanezt elérhetjük a speciális domain értékkel is, tehát cookieDomain: domain.

A cookieSecure attribútum auto alapértelmezett értéke azt jelenti, hogy ha a webhely HTTPS-en fut, a cookie-k a Secure jelzővel kerülnek elküldésre, és így csak HTTPS-en keresztül lesznek elérhetők.

HTTP proxy

Ha a webhely HTTP proxy mögött fut, adja meg annak IP címét, hogy a HTTPS-en keresztüli kapcsolat és a kliens IP címének észlelése megfelelően működjön. Tehát hogy a Nette\Http\Request::getRemoteAddress() és isSecured() függvények helyes értékeket adjanak vissza, és a sablonokban a linkek https: protokollal generálódjanak.

http:
	# IP cím, tartomány (pl. 127.0.0.1/8) vagy ezen értékek tömbje
	proxy: 127.0.0.1       # (string|string[]) alapértelmezett nincs beállítva

Session

Alapvető session beállítások:

session:
	# session panel megjelenítése a Tracy Bar-ban?
	debugger: ...        # (bool) alapértelmezett false

	# inaktivitási idő, amely után a session lejár
	expiration: 14 days  # (string) alapértelmezett '3 hours'

	# mikor kell elindítani a sessiont?
	autoStart: ...       # (smart|always|never) alapértelmezett 'smart'

	# handler, a SessionHandlerInterface interfészt implementáló szolgáltatás
	handler: @handlerService

Az autoStart opció vezérli, hogy mikor kell elindítani a sessiont. Az always érték azt jelenti, hogy a session mindig elindul az alkalmazás indításakor. A smart érték azt jelenti, hogy a session csak akkor indul el az alkalmazás indításakor, ha már létezik, vagy abban a pillanatban, amikor olvasni vagy írni akarunk belőle. Végül a never érték letiltja a session automatikus indítását.

Továbbá beállíthatók az összes PHP session direktíva (camelCase formátumban) és a readAndClose is. Példa:

session:
	# 'session.name' írjuk 'name'-ként
	name: MYID

	# 'session.save_path' írjuk 'savePath'-ként
	savePath: "%tempDir%/sessions"

A session cookie ugyanazokkal a paraméterekkel kerül elküldésre, mint a más cookie-k, de ezeket megváltoztathatja számára:

session:
	# domainek, amelyek elfogadják a cookie-t
	cookieDomain: 'example.com'   # (string|domain)

	# korlátozások más domainről való hozzáférés esetén
	cookieSamesite: None          # (Strict|Lax|None) alapértelmezett Lax

A cookieSamesite attribútum befolyásolja, hogy a cookie elküldésre kerül-e más domainről való hozzáférés esetén, ami bizonyos védelmet nyújt a Cross-Site Request Forgery (CSRF) támadások ellen.

DI szolgáltatások

Ezek a szolgáltatások kerülnek hozzáadásra a DI konténerhez:

Név Típus Leírás
http.request Nette\Http\Request HTTP kérés
http.response Nette\Http\Response HTTP válasz
session.session Nette\Http\Session session kezelés
verzió: 4.0