Konfiguracja HTTP

Przegląd opcji konfiguracyjnych dla Nette HTTP.

Jeśli nie używasz całego frameworka, ale tylko tej biblioteki, przeczytaj, jak wczytać 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'

Framework ze względów bezpieczeństwa 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ę ona na tej samej domenie. Może to być w niektórych sytuacjach niepożądane (na przykład jeśli tworzysz aplikację dla Facebooka), zachowanie można zatem zmienić, ustawiając frames: http://allowed-host.com lub frames: true.

Content Security Policy

Łatwo można tworzyć nagłówki Content-Security-Policy (dalej CSP), ich opis znajdziesz w opisie CSP. Dyrektywy CSP (jak np. script-src) mogą być zapisane albo jako ciągi znaków zgodnie ze specyfikacją, albo jako tablica wartości dla lepszej czytelności. Wtedy nie trzeba wokół słów kluczowych, jak na przykład 'self', pisać cudzysłowów. Nette również automatycznie wygeneruje wartość nonce, więc w nagłówku będzie na przykład 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# ciąg znaków 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 tworzyć nagłówki Content-Security-Policy-Report-Only (które można używać 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

Ciasteczka HTTP

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

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

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

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

	# wyłącza wysyłanie ciasteczka używanego przez Nette jako ochronę przed CSRF
	disableNetteCookie: ...  # (bool) domyślnie false

Atrybut cookieDomain określa, które domeny mogą akceptować ciasteczka. Jeśli nie jest podany, ciasteczko akceptuje ta sama (sub)domena, która je ustawiła, ale nie jej subdomeny. Jeśli cookieDomain jest podany, uwzględniane są również subdomeny. Dlatego podanie cookieDomain jest mniej ograniczające niż jego pominięcie.

Na przykład przy cookieDomain: nette.org ciasteczka są dostępne również na wszystkich subdomenach, takich jak doc.nette.org. Tego samego można dokonać również za pomocą specjalnej wartości domain, czyli cookieDomain: domain.

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

Proxy HTTP

Jeśli strona działa za proxy HTTP, podaj jej adres IP, aby poprawnie działało wykrywanie połączenia przez HTTPS oraz adres IP klienta. Czyli aby funkcje Nette\Http\Request::getRemoteAddress()isSecured() zwracały poprawne wartości, a w szablonach generowały się 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 nieustawione

Sesja

Podstawowe ustawienia sesji:

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

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

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

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

Opcja autoStart kontroluje, kiedy ma się uruchamiać sesja. Wartość always oznacza, że sesja uruchomi się zawsze wraz z uruchomieniem aplikacji. Wartość smart oznacza, że sesja uruchomi się przy starcie aplikacji tylko wtedy, gdy już istnieje, lub w chwili, gdy chcemy z niej czytać lub do niej zapisywać. A na koniec wartość never zabrania automatycznego startu sesji.

Dalej można ustawiać wszystkie dyrektywy sesji PHP (w formacie camelCase) oraz readAndClose. Przykład:

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

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

Ciasteczko sesji

Ciasteczko sesji jest wysyłane z tymi samymi parametrami co inne ciasteczka, ale te możesz dla niego zmienić:

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

	# ograniczenie przy dostępie z innej domeny
	cookieSamesite: None          # (Strict|Lax|None) domyślnie Lax

Atrybut cookieSamesite wpływa na to, czy ciasteczko zostanie wysłane podczas dostępu z innej domeny, co zapewnia pewną ochronę przed atakami Cross-Site Request Forgery (CSRF).

Usługi DI

Te usługi 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