Konfiguracija HTTP
Pregled konfiguracijskih možnosti za Nette HTTP.
Če ne uporabljate celotnega ogrodja, ampak samo to knjižnico, preberite, kako naložiti konfiguracijo.
Glave HTTP
http:
# glave, ki se pošljejo z vsako zahtevo
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# vpliva na glavo X-Frame-Options
frames: ... # (string|bool) privzeto je 'SAMEORIGIN'
Ogrodje iz varnostnih razlogov pošilja glavo X-Frame-Options: SAMEORIGIN
, ki pravi, da se stran lahko prikaže
znotraj druge strani (v elementu <iframe>
) samo, če se nahaja na isti domeni. To je lahko v nekaterih
situacijah nezaželeno (na primer, če razvijate aplikacijo za Facebook), vedenje lahko zato spremenite z nastavitvijo
frames: http://allowed-host.com
ali frames: true
.
Content Security Policy
Enostavno je mogoče sestaviti glave Content-Security-Policy
(v nadaljevanju CSP), njihov opis najdete v opisu CSP. CSP direktive (kot npr. script-src
) so lahko zapisane
bodisi kot nizi po specifikaciji ali kot polja vrednosti zaradi boljše čitljivosti. Potem ni treba okoli ključnih besed, kot na
primer 'self'
, pisati narekovajev. Nette tudi samodejno generira vrednost nonce
, tako da bo v glavi na
primer 'nonce-y4PopTLM=='
.
http:
# Content Security Policy
csp:
# niz v obliki po specifikaciji CSP
default-src: "'self' https://example.com"
# polje vrednosti
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool v primeru stikal
upgrade-insecure-requests: true
block-all-mixed-content: false
V predlogah uporabljajte <script n:nonce>...</script>
in vrednost nonce se dopolni samodejno. Delati
varne spletne strani v Nette je res enostavno.
Podobno je mogoče sestaviti tudi glave Content-Security-Policy-Report-Only
(ki jih je mogoče uporabljati
sočasno s CSP) in 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
Piškotki HTTP
Lahko spremenite privzete vrednosti nekaterih parametrov metode Nette\Http\Response::setCookie() in seje.
http:
# doseg piškotka glede na pot
cookiePath: ... # (string) privzeto je '/'
# domene, ki sprejemajo piškotek
cookieDomain: 'example.com' # (string|domain) privzeto je nenastavljeno
# pošiljati piškotek samo preko HTTPS?
cookieSecure: ... # (bool|auto) privzeto je auto
# izklopi pošiljanje piškotka, ki ga uporablja Nette kot zaščito pred CSRF
disableNetteCookie: ... # (bool) privzeto je false
Atribut cookieDomain
določa, katere domene lahko sprejemajo piškotek. Če ni naveden, piškotek sprejema ista
(pod)domena, kot ga je nastavila, vendar ne njenih poddomen. Če je cookieDomain
določen, so vključene
tudi poddomene. Zato je navedba cookieDomain
manj omejujoča kot izpustitev.
Na primer, pri cookieDomain: nette.org
so piškotki dostopni tudi na vseh poddomenah kot
doc.nette.org
. Istega lahko dosežemo tudi s pomočjo posebne vrednosti domain
, torej
cookieDomain: domain
.
Privzeta vrednost auto
pri atributu cookieSecure
pomeni, da če spletno mesto teče na HTTPS, se bodo
piškotki pošiljali z zastavico Secure
in bodo torej dostopni samo preko HTTPS.
HTTP proxy
Če spletno mesto teče za HTTP proxyjem, vnesite njegov IP naslov, da bo pravilno delovalo zaznavanje povezave preko HTTPS in
tudi IP naslova odjemalca. Torej, da bosta funkciji Nette\Http\Request::getRemoteAddress() in isSecured() vračali pravilne vrednosti in se bodo v predlogah
generirale povezave s https:
protokolom.
http:
# IP naslov, obseg (npr. 127.0.0.1/8) ali polje teh vrednosti
proxy: 127.0.0.1 # (string|string[]) privzeto je nenastavljeno
Seja
Osnovne nastavitve sej:
session:
# prikazati ploščo seje v Tracy Bar?
debugger: ... # (bool) privzeto je false
# čas neaktivnosti, po katerem seja poteče
expiration: 14 days # (string) privzeto je '3 hours'
# kdaj naj se zažene seja?
autoStart: ... # (smart|always|never) privzeto je 'smart'
# handler, storitev, ki implementira vmesnik SessionHandlerInterface
handler: @handlerService
Možnost autoStart
nadzoruje, kdaj naj se zažene seja. Vrednost always
pomeni, da se seja zažene
vedno ob zagonu aplikacije. Vrednost smart
pomeni, da se seja zažene ob zagonu aplikacije samo takrat, ko že
obstaja, ali v trenutku, ko želimo iz nje brati ali vanjo pisati. In končno vrednost never
prepoveduje samodejni
zagon seje.
Nadalje je mogoče nastavljati vse PHP direktive seje (v formatu camelCase) in tudi readAndClose. Primer:
session:
# 'session.name' zapišemo kot 'name'
name: MYID
# 'session.save_path' zapišemo kot 'savePath'
savePath: "%tempDir%/sessions"
Piškotek seje
Piškotek seje se pošilja z enakimi parametri kot drugi piškotki, vendar te lahko zanj spremenite:
session:
# domene, ki sprejemajo piškotek
cookieDomain: 'example.com' # (string|domain)
# omejitve pri dostopu iz druge domene
cookieSamesite: None # (Strict|Lax|None) privzeto je Lax
Atribut cookieSamesite
vpliva na to, ali bo piškotek poslan pri dostopu iz druge domene, kar zagotavlja določeno zaščito pred
napadi Cross-Site Request Forgery (CSRF).
Storitve DI
Te storitve se dodajo v DI vsebnik:
Ime | Tip | Opis |
---|---|---|
http.request |
Nette\Http\Request | zahteva HTTP |
http.response |
Nette\Http\Response | odgovor HTTP |
session.session |
Nette\Http\Session | upravljanje sej |