Konfiguriranje protokola HTTP

Pregled možnosti konfiguracije za Nette HTTP.

Če ne uporabljate celotnega ogrodja, temveč 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: ...      # (niz|bool) privzeto je 'SAMEORIGIN'

Iz varnostnih razlogov ogrodje pošlje glavo X-Frame-Options: SAMEORIGIN, ki pove, da se stran lahko prikaže znotraj druge strani (v elementu <iframe>) le, če je ta v isti domeni. To je lahko v določenih situacijah nezaželeno (na primer, če razvijate aplikacijo za Facebook), zato lahko obnašanje spremenite z nastavitvijo okvirjev frames: http://allowed-host.com.

Varnostna politika vsebine

Naslovnice Content-Security-Policy (v nadaljevanju CSP) je mogoče preprosto sestaviti, njihov opis pa je na voljo v opisu CSP. Smernice CSP (kot je script-src) so lahko zapisane kot nizi v skladu s specifikacijo ali kot polja vrednosti zaradi boljše berljivosti. Potem ni treba pisati narekovajev okoli ključnih besed, kot je 'self'. Nette bo samodejno ustvaril tudi vrednost nonce, zato bo 'nonce-y4PopTLM==' poslana v glavi.

http:
	# Pravilnik o varnosti vsebine
	csp:
		# niz v skladu s specifikacijo 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

Uporabite <script n:nonce>...</script> v predlogah in vrednost nonce bo samodejno izpolnjena. Ustvarjanje varnih spletnih mest v Nette je zelo enostavno.

Podobno je mogoče dodati glave Content-Security-Policy-Report-Only (ki se lahko uporabljajo vzporedno s CSP) in politiko funkcij:

http:
	# Samo poročilo o politiki varnosti vsebine
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Politika funkcij
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

Spremenite lahko privzete vrednosti nekaterih parametrov metod Nette\Http\Response::setCookie( ) in session.

http:
	# obseg piškotkov po poti
	cookiePath: ...          # (niz) privzeto je '/'

	# kateri gostitelji lahko prejmejo piškotek
	cookieDomain: 'example.com'  # (niz|domena) privzeta vrednost je ne-nastavljeno

	# za pošiljanje piškotkov samo prek HTTPS?
	cookieSecure: ...        # (bool|auto) privzeto je samodejno

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

Možnost cookieDomain določa, katere domene (izvori) lahko sprejmejo piškotke. Če ni določena, piškotek sprejme ista (pod)domena, kot je nastavljena, izključujoč njihove poddomene. Če je določena možnost cookieDomain, so vključene tudi poddomene. Zato je navedba cookieDomain manj omejevalna kot opustitev.

Če je na primer nastavljena cookieDomain: nette.org, je piškotek na voljo tudi na vseh poddomenah, kot je doc.nette.org. To je mogoče doseči tudi s posebno vrednostjo domain, tj. cookieDomain: domain.

Privzeta vrednost cookieSecure je auto, kar pomeni, da bodo piškotki, če spletna stran deluje v protokolu HTTPS, poslani z zastavico Secure in bodo zato na voljo le prek HTTPS.

Proxy strežnik HTTP

Če spletno mesto deluje za posredniškim strežnikom HTTP, vnesite naslov IP posredniškega strežnika, da bo zaznavanje povezav HTTPS delovalo pravilno, in naslov IP odjemalca. To pomeni, da bosta funkciji Nette\Http\Request::getRemoteAddress() in isSecured( ) vrnili pravilne vrednosti in da bodo v predlogah ustvarjene povezave s protokolom https:.

http:
	# naslov IP, območje (npr. 127.0.0.1/8) ali niz teh vrednosti
	proxy: 127.0.0.1       # (string|string[]) privzeta vrednost je none

Seja

Osnovne nastavitve seje:

session:
	# prikazuje ploščo seje v Tracy Baru?
	debugger: ...        # (bool) privzeto false

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

	# kdaj začeti sejo?
	autoStart: ...       # (smart|always|never) privzeto je 'smart'

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

Možnost autoStart določa, kdaj se seja začne. Vrednost always pomeni, da se seja vedno zažene ob zagonu aplikacije. Vrednost smart pomeni, da se bo seja začela ob zagonu aplikacije le, če že obstaja, ali v trenutku, ko želimo iz nje brati ali vanjo pisati. Nazadnje, vrednost never onemogoča samodejni zagon seje.

Nastavite lahko tudi vse direktive seje PHP (v obliki camelCase) in tudi readAndClose. Primer:

session:
	# 'session.name', zapisano kot 'name'
	name: MYID

	# "session.save_path" zapisano kot "savePath
	savePath: "%tempDir%/sessions"

Sejni piškotek se pošlje z enakimi parametri kot drugi piškotki, vendar jih lahko spremenite:

session:
	# kateri gostitelji lahko prejmejo piškotek.
	cookieDomain: 'example.com'   # (niz|domena)

	# omejitve pri dostopu do zahtevka z različnim izvorom
	cookieSamesite: None          # (Strict|Lax|None) privzeta vrednost je Lax

Možnost cookieSamesite vpliva na to, ali se piškotek pošilja z zahtevki z navzkrižnim izvorom, kar zagotavlja določeno zaščito pred napadi Cross-Site Request Forgery.

Storitve DI

Te storitve so dodane v vsebnik DI:

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