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).