Konfiguriranje protokola HTTP
Pregled možnosti konfiguracije za Nette HTTP.
Če ne uporabljate celotnega ogrodja, temveč 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: ... # (niz|bool) privzeto je 'SAMEORIGIN'
Iz varnostnih razlogov ogrodje pošlje glavo X-Frame-Options: SAMEORIGIN
, ki pove, da se stran lahko prikaže
znotraj druge strani (v elementu <iframe>
) le, če je ta v isti domeni. To je lahko v določenih situacijah
nezaželeno (na primer, če razvijate aplikacijo za Facebook), zato lahko obnašanje spremenite z nastavitvijo okvirjev
frames: http://allowed-host.com
.
Varnostna politika vsebine
Naslovnice Content-Security-Policy
(v nadaljevanju CSP) je mogoče preprosto sestaviti, njihov opis pa je na
voljo v opisu CSP. Smernice CSP (kot je script-src
) so lahko
zapisane kot nizi v skladu s specifikacijo ali kot polja vrednosti zaradi boljše berljivosti. Potem ni treba pisati narekovajev
okoli ključnih besed, kot je 'self'
. Nette bo samodejno ustvaril tudi vrednost nonce
, zato bo
'nonce-y4PopTLM=='
poslana v glavi.
http:
# Pravilnik o varnosti vsebine
csp:
# niz v skladu s specifikacijo 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
Uporabite <script n:nonce>...</script>
v predlogah in vrednost nonce bo samodejno izpolnjena.
Ustvarjanje varnih spletnih mest v Nette je zelo enostavno.
Podobno je mogoče dodati glave Content-Security-Policy-Report-Only
(ki se lahko uporabljajo vzporedno s CSP) in
politiko funkcij:
http:
# Samo poročilo o politiki varnosti vsebine
cspReportOnly:
default-src: self
report-uri: 'https://my-report-uri-endpoint'
# Politika funkcij
featurePolicy:
unsized-media: none
geolocation:
- self
- https://example.com
Piškotki HTTP
Spremenite lahko privzete vrednosti nekaterih parametrov metod Nette\Http\Response::setCookie( ) in session.
http:
# obseg piškotkov po poti
cookiePath: ... # (niz) privzeto je '/'
# kateri gostitelji lahko prejmejo piškotek
cookieDomain: 'example.com' # (niz|domena) privzeta vrednost je ne-nastavljeno
# za pošiljanje piškotkov samo prek HTTPS?
cookieSecure: ... # (bool|auto) privzeto je samodejno
# onemogoči pošiljanje piškotka, ki ga Nette uporablja kot zaščito pred CSRF
disableNetteCookie: ... # (bool) privzeto je false
Možnost cookieDomain
določa, katere domene (izvori) lahko sprejmejo piškotke. Če ni določena, piškotek
sprejme ista (pod)domena, kot je nastavljena, izključujoč njihove poddomene. Če je določena možnost
cookieDomain
, so vključene tudi poddomene. Zato je navedba cookieDomain
manj omejevalna kot
opustitev.
Če je na primer nastavljena cookieDomain: nette.org
, je piškotek na voljo tudi na vseh poddomenah, kot je
doc.nette.org
. To je mogoče doseči tudi s posebno vrednostjo domain
, tj.
cookieDomain: domain
.
Privzeta vrednost cookieSecure
je auto
, kar pomeni, da bodo piškotki, če spletna stran deluje
v protokolu HTTPS, poslani z zastavico Secure
in bodo zato na voljo le prek HTTPS.
Proxy strežnik HTTP
Če spletno mesto deluje za posredniškim strežnikom HTTP, vnesite naslov IP posredniškega strežnika, da bo zaznavanje
povezav HTTPS delovalo pravilno, in naslov IP odjemalca. To pomeni, da bosta funkciji Nette\Http\Request::getRemoteAddress() in isSecured( ) vrnili pravilne vrednosti in da bodo v predlogah ustvarjene povezave
s protokolom https:
.
http:
# naslov IP, območje (npr. 127.0.0.1/8) ali niz teh vrednosti
proxy: 127.0.0.1 # (string|string[]) privzeta vrednost je none
Seja
Osnovne nastavitve seje:
session:
# prikazuje ploščo seje v Tracy Baru?
debugger: ... # (bool) privzeto false
# čas neaktivnosti, po katerem seja poteče
expiration: 14 days # (niz) privzeto je '3 ure'
# kdaj začeti sejo?
autoStart: ... # (smart|always|never) privzeto je 'smart'
# handler, storitev, ki izvaja vmesnik SessionHandlerInterface
handler: @handlerService
Možnost autoStart
določa, kdaj se seja začne. Vrednost always
pomeni, da se seja vedno zažene ob
zagonu aplikacije. Vrednost smart
pomeni, da se bo seja začela ob zagonu aplikacije le, če že obstaja, ali
v trenutku, ko želimo iz nje brati ali vanjo pisati. Nazadnje, vrednost never
onemogoča samodejni zagon seje.
Nastavite lahko tudi vse direktive seje PHP (v obliki camelCase) in tudi readAndClose. Primer:
session:
# 'session.name', zapisano kot 'name'
name: MYID
# "session.save_path" zapisano kot "savePath
savePath: "%tempDir%/sessions"
Piškotek seje
Sejni piškotek se pošlje z enakimi parametri kot drugi piškotki, vendar jih lahko spremenite:
session:
# kateri gostitelji lahko prejmejo piškotek.
cookieDomain: 'example.com' # (niz|domena)
# omejitve pri dostopu do zahtevka z različnim izvorom
cookieSamesite: None # (Strict|Lax|None) privzeta vrednost je Lax
Možnost cookieSamesite
vpliva na to, ali se piškotek pošilja z zahtevki z navzkrižnim izvorom, kar zagotavlja določeno
zaščito pred napadi Cross-Site Request
Forgery.
Storitve DI
Te storitve so dodane v vsebnik DI:
Ime | Vrsta | Opis |
---|---|---|
http.request |
Nette\Http\Request | HTTP request |
http.response |
Nette\Http\Response | HTTP response |
session.session |
Nette\Http\Session | upravljanje sej |