Configuration HTTP
Aperçu des options de configuration de Nette HTTP.
Si vous n'utilisez pas tout le framework, mais seulement cette bibliothèque, lisez comment charger la configuration.
En-têtes HTTP
http:
# en-têtes envoyés avec chaque réponse
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# influence l'en-tête X-Frame-Options
frames: ... # (string|bool|null) 'SAMEORIGIN' par défaut
Pour des raisons de sécurité, le framework envoie l'en-tête X-Frame-Options: SAMEORIGIN, qui indique qu'une
page ne peut être affichée à l'intérieur d'une autre page (dans un élément <iframe>) que si elle se
trouve sur le même domaine. Cela peut être indésirable dans certaines situations (par exemple si vous développez une
application Facebook) ; le comportement peut donc être modifié en définissant frames: http://allowed-host.com pour
autoriser un hôte précis, frames: true pour autoriser l'inclusion depuis n'importe où (l'en-tête est omis), ou
frames: false pour l'interdire complètement (X-Frame-Options: DENY).
Par défaut, Nette envoie aussi les en-têtes X-Powered-By: Nette Framework 3 et
Content-Type: text/html; charset=utf-8. Vous pouvez supprimer n'importe quel en-tête, y compris ceux par défaut, en
fixant sa valeur à une chaîne vide.
Content Security Policy
Les en-têtes Content-Security-Policy (CSP) se configurent facilement ; leur description se trouve dans la spécification CSP. Les directives CSP (comme script-src) peuvent
s'écrire soit sous forme de chaînes conformes à la spécification, soit sous forme de tableaux de valeurs, plus lisibles. Il
n'est alors pas nécessaire d'entourer de guillemets les mots-clés comme 'self'. Nette générera aussi
automatiquement une valeur nonce, si bien que quelque chose comme 'nonce-y4PopTLM==' sera envoyé dans
l'en-tête.
http:
# Content Security Policy
csp:
# chaîne conforme à la spécification CSP
default-src: "'self' https://example.com"
# tableau de valeurs
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool dans le cas des interrupteurs
upgrade-insecure-requests: true
block-all-mixed-content: false
Utilisez <script n:nonce>...</script> dans les templates et la valeur du nonce sera renseignée
automatiquement. Faire des sites web sûrs avec Nette est vraiment facile.
De la même façon, on peut configurer les en-têtes Content-Security-Policy-Report-Only (utilisables en
parallèle de CSP) et la 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
Cookie HTTP
Vous pouvez changer les valeurs par défaut de certains paramètres de la méthode Nette\Http\Response::setCookie() et de la gestion des sessions.
http:
# portée du cookie par chemin
cookiePath: ... # (string) '/' par défaut
# domaines qui peuvent recevoir le cookie
cookieDomain: 'example.com' # (string|domain) non défini par défaut
# n'envoyer les cookies que via HTTPS ?
cookieSecure: ... # (bool|auto) auto par défaut
# désactive l'envoi du cookie que Nette utilise pour la protection CSRF
disableNetteCookie: ... # (bool) false par défaut
L'attribut cookieDomain détermine quels domaines (origines) peuvent accepter les cookies. S'il n'est pas
indiqué, le cookie est accepté par le même (sous-)domaine que celui qui l'a défini, à l'exclusion de ses
sous-domaines. Si cookieDomain est indiqué, les sous-domaines sont inclus eux aussi. Indiquer
cookieDomain est donc moins restrictif que de l'omettre.
Par exemple, si cookieDomain: nette.org est défini, les cookies sont aussi disponibles sur tous les sous-domaines
comme doc.nette.org. On peut aussi y parvenir avec la valeur spéciale domain, c'est-à-dire
cookieDomain: domain.
La valeur par défaut auto de l'attribut cookieSecure signifie que si le site tourne en HTTPS, les
cookies seront envoyés avec le drapeau Secure et ne seront donc disponibles que via HTTPS.
Proxy HTTP
Si le site tourne derrière un proxy HTTP, indiquez l'adresse IP du proxy afin que la détection de la connexion HTTPS et
l'adresse IP du client fonctionnent correctement. Autrement dit, pour que Nette\Http\Request::getRemoteAddress() et isSecured() renvoient les bonnes valeurs et que les liens soient
générés avec le protocole https: dans les templates.
http:
# adresse IP, plage (par exemple 127.0.0.1/8), ou tableau de ces valeurs
proxy: 127.0.0.1 # (string|string[]) non défini par défaut
Forcer HTTPS
Force sans condition le schéma de la requête en HTTPS. C'est utile pour les sites uniquement HTTPS qui tournent derrière un
répartiteur de charge ou un reverse proxy terminant le TLS mais ne transmettant pas l'en-tête X-Forwarded-Proto, si
bien que la détection HTTPS standard (même avec un Proxy HTTP configuré) ne le
remarquerait pas.
http:
# force le schéma HTTPS pour toutes les requêtes
forceHttps: true # (bool) false par défaut
Session
Réglages de base des sessions :
session:
# afficher le panneau de session dans la Tracy Bar ?
debugger: ... # (bool) false par défaut
# durée d'inactivité au bout de laquelle la session expire
expiration: 14 days # (string) '3 hours' par défaut
# quand la session doit-elle démarrer ?
autoStart: ... # (smart|always|never) 'smart' par défaut
# handler, un service implémentant SessionHandlerInterface
handler: @handlerService
L'option autoStart détermine quand la session doit démarrer. La valeur always signifie que la
session démarre dès que l'application démarre. La valeur smart signifie que la session ne démarre avec
l'application que si elle existe déjà, ou au moment où nous voulons y lire ou y écrire. Enfin, la valeur never
désactive le démarrage automatique de la session.
Vous pouvez en outre définir toutes les directives de session de PHP (au format camelCase) ainsi que readAndClose. Exemple :
session:
# 'session.name' s'écrit 'name'
name: MYID
# 'session.save_path' s'écrit 'savePath'
savePath: "%tempDir%/sessions"
Cookie de session
Le cookie de session est envoyé avec les mêmes paramètres que les autres cookies, mais vous pouvez les changer spécialement pour lui :
session:
# domaines qui peuvent recevoir le cookie
cookieDomain: 'example.com' # (string|domain)
# restriction pour l'accès cross-origin
cookieSamesite: None # (Strict|Lax|None) Lax par défaut
L'attribut cookieSamesite détermine si le cookie est envoyé lors des requêtes cross-origin, ce qui offre une certaine protection
contre les attaques Cross-Site Request Forgery
(CSRF).
Services DI
Ces services sont ajoutés au conteneur DI :
| Nom | Type | Description |
|---|---|---|
http.request |
Nette\Http\Request | requête HTTP |
http.response |
Nette\Http\Response | réponse HTTP |
session.session |
Nette\Http\Session | gestion des sessions |
http.requestFactory |
Nette\Http\RequestFactory | factory qui crée la requête HTTP |