Konfigurace HTTP
Přehled konfiguračních voleb pro Nette HTTP.
HTTP hlavičky
http:
# hlavičky, které se s každým požadavkem odešlou
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# ovlivňuje hlavičku X-Frame-Options
frames: ... # (string|bool) výchozí je 'SAMEORIGIN'
Framework z bezpečnostních důvodů odesílá hlavičku X-Frame-Options: SAMEORIGIN
, která říká, že
stránku lze zobrazit uvnitř jiné stránky (v elementu <iframe>
) pouze pokud se nachází na stejné
doméně. To může být v některých situacích nežádoucí (například pokud vyvíjíte aplikaci pro Facebook), chování
lze proto změnit nastavením frames: http://allowed-host.com
nebo frames: true
.
Content Security Policy
Snadno lze sestavovat hlavičky Content-Security-Policy
(dále CSP), jejich popis najdete v popisu CSP. CSP direktivy (jako např. script-src
) mohou být zapsány
buď jako řetězce dle specifikace, nebo jako pole hodnot kvůli lepší čitelnosti. Pak není potřeba kolem klíčových slov,
jako třeba 'self'
, psát uvozovky. Nette také automaticky vygeneruje hodnotu nonce
, takže
v hlavičce bude třeba 'nonce-y4PopTLM=='
.
http:
# Content Security Policy (od nette/http 2.4.10)
csp:
# řetězec ve tvaru dle specifikace CSP
default-src: "'self' https://example.com"
# pole hodnot
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool v případě přepínačů
upgrade-insecure-requests: true
block-all-mixed-content: false
V šablonách používejte <script n:nonce>...</script>
a hodnota nonce se doplní automaticky.
Dělat bezpečné weby v Nette je opravdu snadné.
Podobně lze sestavit i hlavičky Content-Security-Policy-Report-Only
(které lze používat souběžně s CSP)
a 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
HTTP cookie
Lze změnit vychozí hodnoty parametru $secure
u metody Nette\Http\Response::setCookie().
http:
# posílat cookie pouze přes HTTPS?
cookieSecure: ... # (bool|auto) výchozí je false
Hodnota auto
znamená, že pokud web běží na HTTPS, budou se cookies odesílat s příznakem
Secure
a tedy budou dostupné pouze přes HTTPS.
HTTP proxy
Pokud web běží za HTTP proxy, zadejte její IP adresu, aby správně fungovala detekce IP adresy klienta Nette\Http\Response::getRemoteAddress() a spojení přes HTTPS isSecured().
http:
# IP adresa, rozsah (např. 127.0.0.1/8) nebo pole těchto hodnot
proxy: 127.0.0.1 # (string|string[]) výchozí je nenastaveno
Session
Základní nastavení sessions:
session:
# zobrazit session panel v Tracy Bar?
debugger: ... # (bool) výchozí je false
# doba neaktivity po které session vyexpiruje
expiration: 14 days # (string) výchozí je '3 hours'
# startovat automaticky session po vytvoření kontejneru?
# 'smart' startuje session pokud je již vytvořena
autoStart: ... # (bool|smart) výchozí je 'smart'
# handler, služba implementující rozhraní SessionHandlerInterface
handler: @handlerService
Dále lze nastavovat všechny PHP session direktivy (ve formátu camelCase):
session:
# 'session.name' zapíšeme jako 'name'
name: MYID
# 'session.save_path' zapíšeme jako 'savePath'
savePath: "%tempDir%/sessions"
Session cookie
Session cookie se odesílá se stejnými parametry jako jiné cookie, ale tyto můžete pro ni změnit:
session:
# domény, které přijímají cookie
cookieDomain: 'example.com' # (string|domain) výchozí je nenastaveno
# omezení při přístupu z jiné domény
cookieSamesite: Lax # (Strict|Lax|None) výchozí je nenastaveno
Atribut cookieDomain
určuje, které domény mohou cookie přijímat. Není-li uveden, cookie přijímá stejná
(sub)doména, jako ji nastavila, ale nikoliv její subdomény. Pokud je cookieDomain
zadaný, jsou zahrnuty
i subdomény. Proto je uvedení cookieDomain
méně omezující než vynechání.
Například při cookieDomain: nette.org
jsou cookies dostupné i na všech subdoménách jako
doc.nette.org
. Téhož lze dosáhnout také pomocí speciální hodnoty domain
, tedy
cookieDomain: domain
.
Atribut cookieSamesite
ovlivňuje, zda bude cookie odeslaná při přístupu z jiné
domény, což poskytuje určitou ochranu před útoky Cross-Site Request Forgery (CSRF).