Konfiguracja HTTP

Przegląd opcji konfiguracyjnych dla Nette HTTP.

Jeśli nie używasz całego frameworka, a jedynie tej biblioteki, przeczytaj jak załadować konfigurację.

Nagłówki HTTP

http:
	# nagłówki, które są wysyłane z każdym żądaniem
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# wpływa na nagłówek X-Frame-Options
	frames: ...      # (string|bool) domyślnie 'SAMEORIGIN'

Ze względów bezpieczeństwa framework wysyła nagłówek X-Frame-Options: SAMEORIGIN, który mówi, że strona może być wyświetlana wewnątrz innej strony (w elemencie <iframe>) tylko wtedy, gdy znajduje się w tej samej domenie. Może to być niepożądane w niektórych sytuacjach (na przykład, jeśli tworzysz aplikację dla Facebooka), więc możesz zmienić zachowanie, ustawiając frames: http://allowed-host.com.

Polityka bezpieczeństwa treści

Łatwo jest zbudować nagłówki Content-Security-Policy (dalej CSP), zobacz opis CSP dla opisu. Dyrektywy CSP (takie jak script-src) mogą być zapisane jako łańcuchy zgodnie ze specyfikacją lub jako tablica wartości dla lepszej czytelności. Wtedy nie ma potrzeby pisania cudzysłowów wokół słów kluczowych, takich jak na przykład 'self',. Nette automatycznie wygeneruje również wartość nonce, więc w nagłówku będzie napisane 'nonce-y4PopTLM=='.

http:
	# Polityka bezpieczeństwa treści
	csp:
		# ciąg znaków w postaci specyfikacji CSP
		default-src: "'self' https://example.com"

		# array of values
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool w przypadku przełączników
		upgrade-insecure-requests: true
		block-all-mixed-content: false

W szablonach należy używać <script n:nonce>...</script> a wartość nonce zostanie dodana automatycznie. Tworzenie bezpiecznych stron w Nette jest naprawdę proste.

Podobnie można zbudować nagłówki Content-Security-Policy-Report-Only (które mogą być używane równolegle z CSP) i 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

Możesz zmienić domyślne wartości niektórych parametrów metod Nette\Http\Response::setCookie() i session.

http:
	# cookie reach by path
	cookiePath: ...          # (string) domyślnie '/'

	# domeny, które akceptują ciasteczka
	cookieDomain: 'example.com' # (string|domain) domyślnie nie jest ustawiony

	# wysyłać cookie tylko przez HTTPS?
	cookieSecure: ...        # (bool|auto) domyślnie jest auto

	# wyłącza wysyłanie ciasteczka, którego Nette używa jako zabezpieczenia przed CSRF
	disableNetteCookie: ...  # (bool) domyślnie jest false

Atrybut cookieDomain określa, które domeny mogą akceptować pliki cookie. Jeśli nie jest określone, plik cookie jest akceptowany przez tę samą (pod)domenę, która go ustawiła, ale nie jej subdomeny. Jeśli określono cookieDomain, uwzględniane są subdomeny. Dlatego określenie cookieDomain jest mniej restrykcyjne niż pominięcie go.

Na przykład, w przypadku cookieDomain: nette.org, pliki cookie są również dostępne na wszystkich subdomenach jako doc.nette.org. To samo można również osiągnąć za pomocą wartości specjalnej domain, czyli cookieDomain: domain.

Domyślna wartość auto dla atrybutu cookieSecure oznacza, że jeśli strona działa na HTTPS, pliki cookie będą wysyłane z flagą Secure, a więc będą dostępne tylko przez HTTPS.

Proxy HTTP

Jeśli witryna działa za proxy HTTP, wpisz jego adres IP, aby wykrywanie połączenia HTTPS działało poprawnie, a także adres IP klienta. Oznacza to, że funkcje Nette:getRemoteAddress()isSecured() zwracają poprawne wartości i generują w szablonach linki z protokołem https:.

http:
	# adres IP, zakres (np. 127.0.0.1/8) lub tablica tych wartości
	proxy: 127.0.0.1 # (string|string[]) domyślnie nie jest ustawiony

Sesja

Podstawowe ustawienia sesji:

session:
	# pokazowy panel sesyjny w Tracy Bar?
	debugger: ...        # (bool) domyślnie jest false

	# okres bezczynności, po którym sesja wygasa
	expiration: 14 days  # (string) defaults to '3 hours'

	# kiedy sesja powinna się rozpocząć?
	autoStart: ...       # (smart|always|never) domyślnie 'smart'

	# handler, usługa implementująca interfejs SessionHandler
	handler: @handlerService

Opcja autoStart kontroluje, kiedy rozpocząć sesję. Wartość always oznacza, że sesja będzie zawsze uruchamiana w momencie startu aplikacji. Wartość smart oznacza, że sesja będzie uruchamiana tylko w momencie startu aplikacji, jeśli już istnieje, lub gdy będziemy chcieli z niej czytać lub do niej pisać. Wreszcie, wartość never wyłącza automatyczne rozpoczynanie sesji.

Możesz również ustawić wszystkie dyrektywy sesji PHP (w formacie camelCase), a także readAndClose. Przykład:

session:
	# write 'session.name' as 'name'
	name: MYID

	# zapisz 'session.save_path' jako 'savePath'
	savePath: "%tempDir%/sessions"

Sesyjny plik cookie jest wysyłany z takimi samymi parametrami jak inne pliki cookie, ale możesz je dla niego zmienić:

session:
	# domeny, które akceptują ciasteczka
	cookieDomain: 'example.com' # (string|domain)

	# ograniczenia w przypadku dostępu z innej domeny
	cookieSamesite: None        # (Strict|Lax|None) domyślnie Lax

Atrybut cookieSamesite wpływa na to, czy plik cookie jest wysyłany przy dostępie z innej domeny, co zapewnia pewną ochronę przed atakami Cross-Site Request Forgery (CSRF).

Usługi DI

Usługi te są dodawane do kontenera DI:

Nazwa Typ Opis
http.request Nette\Http\Request żądanie HTTP
http.response Nette\Http\Response odpowiedź HTTP
session.session Nette\Http\Session zarządzanie sesją
wersja: 4.0