Konfiguracja HTTP

Przegląd opcji konfiguracyjnych dla Nette HTTP.

Jeśli nie używasz całego frameworku, tylko tej biblioteki, przeczytaj, jak wczytać konfigurację.

Nagłówki HTTP

http:
	# nagłówki wysyłane z każdą odpowiedzią
	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|null) domyślnie 'SAMEORIGIN'

Ze względów bezpieczeństwa framework wysyła nagłówek X-Frame-Options: SAMEORIGIN, który mówi, że stronę można wyświetlić wewnątrz innej strony (w elemencie <iframe>) tylko wtedy, gdy znajduje się w tej samej domenie. W pewnych sytuacjach może to być niepożądane (na przykład gdy tworzysz aplikację dla Facebooka), więc zachowanie można zmienić, ustawiając frames: http://allowed-host.com, żeby dopuścić konkretny host, frames: true, żeby dopuścić osadzanie skądkolwiek (nagłówek zostaje pominięty), albo frames: false, żeby całkowicie tego zabronić (X-Frame-Options: DENY).

Domyślnie Nette wysyła też nagłówki X-Powered-By: Nette Framework 3 i Content-Type: text/html; charset=utf-8. Dowolny nagłówek, także te domyślne, możesz usunąć, ustawiając jego wartość na pusty ciąg.

Content Security Policy

Nagłówki Content-Security-Policy (CSP) da się łatwo skonfigurować; ich opis znajdziesz w specyfikacji CSP. Dyrektywy CSP (jak script-src) można zapisać albo jako ciągi zgodne ze specyfikacją, albo jako tablice wartości dla lepszej czytelności. Wtedy nie trzeba używać cudzysłowów wokół słów kluczowych jak 'self'. Nette wygeneruje też automatycznie wartość nonce, więc w nagłówku wyśle się coś w rodzaju 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# ciąg zgodny ze specyfikacją CSP
		default-src: "'self' https://example.com"

		# tablica wartości
		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 używaj <script n:nonce>...</script>, a wartość nonce zostanie uzupełniona automatycznie. Tworzenie bezpiecznych stron w Nette jest naprawdę łatwe.

Podobnie można skonfigurować nagłówki Content-Security-Policy-Report-Only (których można używać równolegle z CSP) oraz 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 metody Nette\Http\Response::setCookie() i obsługi sesji.

http:
	# zasięg cookie według ścieżki
	cookiePath: ...          # (string) domyślnie '/'

	# domeny, które mogą przyjąć cookie
	cookieDomain: 'example.com'  # (string|domain) domyślnie nieustawione

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

	# wyłącza wysyłanie cookie, którego Nette używa do ochrony przed CSRF
	disableNetteCookie: ...  # (bool) domyślnie false

Atrybut cookieDomain określa, które domeny (origins) mogą przyjmować cookies. Jeśli nie zostanie podany, cookie przyjmuje ta sama (sub)domena, która je ustawiła, z wyłączeniem jej subdomen. Jeśli cookieDomain zostanie podany, subdomeny również są objęte. Podanie cookieDomain jest więc mniej restrykcyjne niż jego pominięcie.

Na przykład jeśli ustawione jest cookieDomain: nette.org, cookies są dostępne również we wszystkich subdomenach, jak doc.nette.org. To samo osiągniesz też wartością specjalną domain, czyli cookieDomain: domain.

Domyślna wartość auto dla atrybutu cookieSecure oznacza, że jeśli witryna działa na HTTPS, cookies będą wysyłane z flagą Secure i tym samym będą dostępne tylko przez HTTPS.

Proxy HTTP

Jeśli witryna działa za proxy HTTP, podaj adres IP proxy, żeby poprawnie działało wykrywanie połączenia HTTPS i adresu IP klienta. Czyli żeby Nette\Http\Request::getRemoteAddress()isSecured() zwracały poprawne wartości, a w szablonach generowały się odnośniki z protokołem https:.

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

Wymuszenie HTTPS

Bezwarunkowo wymusza schemat żądania HTTPS. Przydaje się to dla witryn działających wyłącznie na HTTPS za load balancerem albo reverse proxy, które terminuje TLS, ale nie przekazuje nagłówka X-Forwarded-Proto, przez co standardowe wykrywanie HTTPS (nawet przy skonfigurowanym Proxy HTTP) by tego nie wychwyciło.

http:
	# wymusza schemat HTTPS dla wszystkich żądań
	forceHttps: true       # (bool) domyślnie false

Sesja

Podstawowe ustawienia sesji:

session:
	# pokazać panel sesji w Tracy Bar?
	debugger: ...        # (bool) domyślnie false

	# czas nieaktywności, po którym sesja wygasa
	expiration: 14 days  # (string) domyślnie '3 hours'

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

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

Opcja autoStart steruje tym, kiedy sesja ma się uruchomić. Wartość always oznacza, że sesja uruchamia się zawsze przy starcie aplikacji. Wartość smart oznacza, że sesja uruchamia się przy starcie aplikacji tylko wtedy, gdy już istnieje, albo w momencie, gdy chcemy z niej czytać albo do niej pisać. Wreszcie wartość never wyłącza automatyczne uruchamianie sesji.

Poza tym możesz ustawić wszystkie dyrektywy sesji PHP (w formacie camelCase), a także readAndClose. Przykład:

session:
	# 'session.name' zapisane jako 'name'
	name: MYID

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

Cookie sesji wysyłane jest z tymi samymi parametrami co pozostałe cookies, ale możesz je zmienić specjalnie dla niego:

session:
	# domeny, które mogą przyjąć cookie
	cookieDomain: 'example.com'   # (string|domain)

	# ograniczenie przy dostępie cross-origin
	cookieSamesite: None          # (Strict|Lax|None) domyślnie Lax

Atrybut cookieSamesite wpływa na to, czy cookie jest wysyłane przy żądaniach cross-origin, co daje pewną ochronę przed atakami Cross-Site Request Forgery (CSRF).

Usługi DI

Do kontenera DI dodawane są te usługi:

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ą
http.requestFactory Nette\Http\RequestFactory fabryka tworząca żądanie HTTP
wersja: 4.x