HTTP konfigurálása

A Nette HTTP konfigurációs lehetőségeinek áttekintése.

Ha nem a teljes keretrendszert, hanem csak ezt a könyvtárat használja, olvassa el , hogyan töltse be a konfigurációt.

HTTP fejlécek

http:
	# headerek, amelyeket minden egyes kéréssel elküldenek
	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 értéke 'SAMEORIGIN'

Biztonsági okokból a keretrendszer egy X-Frame-Options: SAMEORIGIN fejlécet küld, amely azt mondja, hogy egy oldal egy másik oldalon belül jeleníthető meg (az elemben <iframe>) csak akkor, ha az ugyanabban a tartományban van. Ez bizonyos helyzetekben nem kívánatos lehet (például, ha Facebook-alkalmazást fejlesztünk), ezért a viselkedés megváltoztatható a frames: http://allowed-host.com.

Tartalombiztonsági politika

Fejlécek Content-Security-Policy (a továbbiakban CSP) könnyen összeállítható, leírásuk a CSP leírásában található. A CSP irányelvek (például script-src) a specifikációnak megfelelően karakterláncokként vagy a jobb olvashatóság érdekében értékekből álló tömbként írhatók. Ekkor nem szükséges idézőjeleket írni az olyan kulcsszavak köré, mint a 'self'. A Nette automatikusan generálja a nonce értékét is, így a 'nonce-y4PopTLM==' a fejlécben kerül elküldésre.

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

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

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

Használja a <script n:nonce>...</script> a sablonokban, és a nonce érték automatikusan kitöltődik. Biztonságos weboldalak készítése a Nette-ben nagyon egyszerű.

Hasonlóképpen hozzáadható a Content-Security-Policy-Report-Only fejléc (amely a CSP-vel párhuzamosan használható) és a Feature Policy:

http:
	# Csak a tartalombiztonsági szabályzat jelentése
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Nette\Http\Response::setCookie() és a session metódusok néhány paraméterének alapértelmezett értékét megváltoztathatja.

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

	# mely hosztok kaphatják meg a cookie-t
	cookieDomain: 'example.com' # (string|domain) alapértelmezés szerint nem beállított

	# a cookie-kat csak HTTPS-en keresztül küldjük?
	cookieSecure: ...        # (bool|auto) alapértelmezés szerint auto

	# letiltja a cookie küldését, amelyet a Nette a CSRF elleni védelemként használ.
	disableNetteCookie: ...  # (bool) alapértelmezés szerint false

A cookieDomain opció határozza meg, hogy mely tartományok (eredet) fogadhatják el a cookie-kat. Ha nincs megadva, akkor a cookie-t ugyanaz a (al)tartomány fogadja el, amelyik az általa beállított, kizárva az aldomainjeiket. Ha a cookieDomain van megadva, akkor az aldomainek is bevonásra kerülnek. Ezért a cookieDomain megadása kevésbé korlátozó, mint az elhagyása.

Például, ha a cookieDomain: nette.org van megadva, a cookie az összes aldomainen is elérhető, mint a doc.nette.org. Ez a domain, azaz cookieDomain: domain speciális értékével is elérhető.

A cookieSecure alapértelmezett értéke a auto, ami azt jelenti, hogy ha a weboldal HTTPS-en fut, a cookie-kat a Secure jelzővel küldi el, és így csak HTTPS-en keresztül lesznek elérhetőek.

HTTP proxy

Ha a webhely HTTP-proxy mögött fut, adja meg a proxy IP-címét, hogy a HTTPS-kapcsolatok felismerése megfelelően működjön, valamint az ügyfél IP-címét. Azaz, hogy a Nette\Http\Request::getRemoteAddress() és az isSecured() a megfelelő értékeket adja vissza, és a sablonokban a https: protokollal generálódjanak linkek.

http:
	# IP-cím, tartomány (pl. 127.0.0.0.1/8) vagy ezek tömbje.
	proxy: 127.0.0.1 # (string|string[]) alapértelmezett értéke none

Munkamenet

Alapvető munkamenetek beállításai:

session:
	# megjeleníti a munkamenet panelt a Tracy Barban?
	debugger: ...        # (bool) alapértelmezett értéke false

	# inaktivitási idő, amely után a munkamenet lejár.
	expiration:          # (string) alapértelmezett értéke

	# mikor kezdjük el a munkamenetet?
	autoStart: ...       # (smart|always|never) alapértelmezés szerint 'smart'

	# handler, a SessionHandlerInterface interfészt megvalósító szolgáltatás.
	handler: @handlerService

A autoStart opció szabályozza a munkamenet indításának időpontját. A always érték azt jelenti, hogy a munkamenet mindig az alkalmazás indításakor indul. A smart érték azt jelenti, hogy a munkamenet csak akkor indul el az alkalmazás indításakor, ha már létezik, vagy abban a pillanatban, amikor olvasni akarunk róla vagy írni akarunk rá. Végül a never érték kikapcsolja a munkamenet automatikus indítását.

Beállíthatjuk továbbá az összes PHP munkamenet direktívát (camelCase formátumban), valamint a readAndClose értéket is. Példa:

session:
	# 'session.name' írva mint 'name'
	name: MYID

	# 'session.save_path' írva mint 'savePath'
	savePath: "%tempDir%/sessions"

A munkamenet süti ugyanazokkal a paraméterekkel kerül elküldésre, mint a többi süti, de ezeket megváltoztathatja:

session:
	# mely hosztok kaphatják meg a cookie-t
	cookieDomain: 'example.com' # (string|domain)

	# korlátozások a cross-origin kérés elérésekor
	cookieSamesite: None        # (Strict|Lax|None) alapértelmezés szerint Lax

A cookieSamesite opció befolyásolja, hogy a cookie-t a cross-origin kérésekkel együtt küldi-e el, ami némi védelmet nyújt a Cross-Site Request Forgery támadások ellen.

DI-szolgáltatások

Ezek a szolgáltatások hozzáadódnak a DI konténerhez:

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