Konfiguracija HTTP

Pregled konfiguracijskih možnosti za Nette HTTP.

Če ne uporabljate celotnega ogrodja, ampak samo to knjižnico, preberite, kako naložiti konfiguracijo.

Glave HTTP

http:
	# glave, ki se pošljejo z vsako zahtevo
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# vpliva na glavo X-Frame-Options
	frames: ...      # (string|bool) privzeto je 'SAMEORIGIN'

Ogrodje iz varnostnih razlogov pošilja glavo X-Frame-Options: SAMEORIGIN, ki pravi, da se stran lahko prikaže znotraj druge strani (v elementu <iframe>) samo, če se nahaja na isti domeni. To je lahko v nekaterih situacijah nezaželeno (na primer, če razvijate aplikacijo za Facebook), vedenje lahko zato spremenite z nastavitvijo frames: http://allowed-host.com ali frames: true.

Content Security Policy

Enostavno je mogoče sestaviti glave Content-Security-Policy (v nadaljevanju CSP), njihov opis najdete v opisu CSP. CSP direktive (kot npr. script-src) so lahko zapisane bodisi kot nizi po specifikaciji ali kot polja vrednosti zaradi boljše čitljivosti. Potem ni treba okoli ključnih besed, kot na primer 'self', pisati narekovajev. Nette tudi samodejno generira vrednost nonce, tako da bo v glavi na primer 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# niz v obliki po specifikaciji CSP
		default-src: "'self' https://example.com"

		# polje vrednosti
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool v primeru stikal
		upgrade-insecure-requests: true
		block-all-mixed-content: false

V predlogah uporabljajte <script n:nonce>...</script> in vrednost nonce se dopolni samodejno. Delati varne spletne strani v Nette je res enostavno.

Podobno je mogoče sestaviti tudi glave Content-Security-Policy-Report-Only (ki jih je mogoče uporabljati sočasno s CSP) in 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

Piškotki HTTP

Lahko spremenite privzete vrednosti nekaterih parametrov metode Nette\Http\Response::setCookie() in seje.

http:
	# doseg piškotka glede na pot
	cookiePath: ...          # (string) privzeto je '/'

	# domene, ki sprejemajo piškotek
	cookieDomain: 'example.com'  # (string|domain) privzeto je nenastavljeno

	# pošiljati piškotek samo preko HTTPS?
	cookieSecure: ...        # (bool|auto) privzeto je auto

	# izklopi pošiljanje piškotka, ki ga uporablja Nette kot zaščito pred CSRF
	disableNetteCookie: ...  # (bool) privzeto je false

Atribut cookieDomain določa, katere domene lahko sprejemajo piškotek. Če ni naveden, piškotek sprejema ista (pod)domena, kot ga je nastavila, vendar ne njenih poddomen. Če je cookieDomain določen, so vključene tudi poddomene. Zato je navedba cookieDomain manj omejujoča kot izpustitev.

Na primer, pri cookieDomain: nette.org so piškotki dostopni tudi na vseh poddomenah kot doc.nette.org. Istega lahko dosežemo tudi s pomočjo posebne vrednosti domain, torej cookieDomain: domain.

Privzeta vrednost auto pri atributu cookieSecure pomeni, da če spletno mesto teče na HTTPS, se bodo piškotki pošiljali z zastavico Secure in bodo torej dostopni samo preko HTTPS.

HTTP proxy

Če spletno mesto teče za HTTP proxyjem, vnesite njegov IP naslov, da bo pravilno delovalo zaznavanje povezave preko HTTPS in tudi IP naslova odjemalca. Torej, da bosta funkciji Nette\Http\Request::getRemoteAddress() in isSecured() vračali pravilne vrednosti in se bodo v predlogah generirale povezave s https: protokolom.

http:
	# IP naslov, obseg (npr. 127.0.0.1/8) ali polje teh vrednosti
	proxy: 127.0.0.1       # (string|string[]) privzeto je nenastavljeno

Seja

Osnovne nastavitve sej:

session:
	# prikazati ploščo seje v Tracy Bar?
	debugger: ...        # (bool) privzeto je false

	# čas neaktivnosti, po katerem seja poteče
	expiration: 14 days  # (string) privzeto je '3 hours'

	# kdaj naj se zažene seja?
	autoStart: ...       # (smart|always|never) privzeto je 'smart'

	# handler, storitev, ki implementira vmesnik SessionHandlerInterface
	handler: @handlerService

Možnost autoStart nadzoruje, kdaj naj se zažene seja. Vrednost always pomeni, da se seja zažene vedno ob zagonu aplikacije. Vrednost smart pomeni, da se seja zažene ob zagonu aplikacije samo takrat, ko že obstaja, ali v trenutku, ko želimo iz nje brati ali vanjo pisati. In končno vrednost never prepoveduje samodejni zagon seje.

Nadalje je mogoče nastavljati vse PHP direktive seje (v formatu camelCase) in tudi readAndClose. Primer:

session:
	# 'session.name' zapišemo kot 'name'
	name: MYID

	# 'session.save_path' zapišemo kot 'savePath'
	savePath: "%tempDir%/sessions"

Piškotek seje

Piškotek seje se pošilja z enakimi parametri kot drugi piškotki, vendar te lahko zanj spremenite:

session:
	# domene, ki sprejemajo piškotek
	cookieDomain: 'example.com'   # (string|domain)

	# omejitve pri dostopu iz druge domene
	cookieSamesite: None          # (Strict|Lax|None) privzeto je Lax

Atribut cookieSamesite vpliva na to, ali bo piškotek poslan pri dostopu iz druge domene, kar zagotavlja določeno zaščito pred napadi Cross-Site Request Forgery (CSRF).

Storitve DI

Te storitve se dodajo v DI vsebnik:

Ime Tip Opis
http.request Nette\Http\Request zahteva HTTP
http.response Nette\Http\Response odgovor HTTP
session.session Nette\Http\Session upravljanje sej
različica: 4.0