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() i 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ą |