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
Ciasteczko HTTP
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() i 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"
Plik cookie sesji
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ą |