Configuración HTTP
Resumen de las opciones de configuración de Nette HTTP.
Si no usa el framework entero, sino solo esta biblioteca, lea cómo cargar la configuración.
Cabeceras HTTP
http:
# cabeceras que se envían con cada respuesta
headers:
X-Powered-By: MyCMS
X-Content-Type-Options: nosniff
X-XSS-Protection: '1; mode=block'
# afecta a la cabecera X-Frame-Options
frames: ... # (string|bool|null) el valor predeterminado es 'SAMEORIGIN'
Por motivos de seguridad, el framework envía la cabecera X-Frame-Options: SAMEORIGIN, que indica que una página
solo se puede mostrar dentro de otra página (en un elemento <iframe>) si está en el mismo dominio. Eso puede
no ser deseable en ciertas situaciones (p. ej. si desarrolla una aplicación de Facebook), así que el comportamiento se puede
cambiar poniendo frames: http://allowed-host.com para permitir un host concreto, frames: true para
permitir el framing desde cualquier sitio (la cabecera se omite) o frames: false para prohibirlo por completo
(X-Frame-Options: DENY).
De forma predeterminada, Nette envía también las cabeceras X-Powered-By: Nette Framework 3 y
Content-Type: text/html; charset=utf-8. Puede eliminar cualquier cabecera, incluidas estas predeterminadas, poniendo
su valor a una cadena vacía.
Content Security Policy
Las cabeceras Content-Security-Policy (CSP) se configuran con facilidad; su descripción la encontrará en la especificación de CSP. Las directivas CSP (como script-src) se pueden
escribir como cadenas según la especificación o como arrays de valores, para que se lean mejor. Entonces no hace falta usar
comillas alrededor de palabras clave como 'self'. Nette generará además automáticamente un valor
nonce, así que en la cabecera se enviará algo como 'nonce-y4PopTLM=='.
http:
# Content Security Policy
csp:
# cadena según la especificación de CSP
default-src: "'self' https://example.com"
# array de valores
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool en el caso de los interruptores
upgrade-insecure-requests: true
block-all-mixed-content: false
Use <script n:nonce>...</script> en las plantillas y el valor del nonce se rellenará
automáticamente. Hacer sitios web seguros en Nette es realmente fácil.
De forma parecida se pueden configurar las cabeceras Content-Security-Policy-Report-Only (que se pueden usar a la
vez que CSP) y 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
Cookies HTTP
Puede cambiar los valores predeterminados de algunos parámetros del método Nette\Http\Response::setCookie() y del manejo de la sesión.
http:
# alcance de la cookie por ruta
cookiePath: ... # (string) el valor predeterminado es '/'
# dominios que pueden recibir la cookie
cookieDomain: 'example.com' # (string|domain) de forma predeterminada sin establecer
# ¿enviar las cookies solo por HTTPS?
cookieSecure: ... # (bool|auto) el valor predeterminado es auto
# desactiva el envío de la cookie que Nette usa para la protección CSRF
disableNetteCookie: ... # (bool) el valor predeterminado es false
El atributo cookieDomain determina qué dominios (orígenes) pueden aceptar las cookies. Si no se indica, la
cookie la acepta el mismo (sub)dominio que la estableció, excluyendo sus subdominios. Si se indica
cookieDomain, se incluyen también los subdominios. Por eso, indicar cookieDomain es menos restrictivo
que omitirlo.
Por ejemplo, si se pone cookieDomain: nette.org, las cookies están disponibles también en todos los subdominios,
como doc.nette.org. Eso también se consigue con el valor especial domain, es decir,
cookieDomain: domain.
El valor predeterminado auto del atributo cookieSecure significa que, si el sitio web funciona con
HTTPS, las cookies se enviarán con la bandera Secure y por tanto solo estarán disponibles por HTTPS.
Proxy HTTP
Si el sitio funciona tras un proxy HTTP, indique la dirección IP del proxy para que la detección de la conexión HTTPS y la
dirección IP del cliente funcionen correctamente. Es decir, para que Nette\Http\Request::getRemoteAddress() e isSecured() devuelvan los valores correctos y los enlaces se generen con el protocolo
https: en las plantillas.
http:
# dirección IP, rango (p. ej. 127.0.0.1/8) o un array de esos valores
proxy: 127.0.0.1 # (string|string[]) de forma predeterminada sin establecer
Forzar HTTPS
Fuerza incondicionalmente el esquema HTTPS de la petición. Es útil para sitios solo HTTPS que funcionan tras un balanceador
de carga o un proxy inverso que termina el TLS pero no pasa la cabecera X-Forwarded-Proto, con lo que la detección
estándar de HTTPS (incluso con el Proxy HTTP configurado) no lo captaría.
http:
# fuerza el esquema HTTPS en todas las peticiones
forceHttps: true # (bool) el valor predeterminado es false
Sesión
Ajustes básicos de las sesiones:
session:
# ¿mostrar el panel de la sesión en la Tracy Bar?
debugger: ... # (bool) el valor predeterminado es false
# tiempo de inactividad tras el cual expira la sesión
expiration: 14 days # (string) el valor predeterminado es '3 hours'
# ¿cuándo debe iniciarse la sesión?
autoStart: ... # (smart|always|never) el valor predeterminado es 'smart'
# handler, un servicio que implementa SessionHandlerInterface
handler: @handlerService
La opción autoStart controla cuándo debe iniciarse la sesión. El valor always significa que la
sesión se inicia siempre que arranca la aplicación. El valor smart significa que la sesión se inicia junto con la
aplicación solo si ya existe, o en el momento en que queremos leer de ella o escribir en ella. Por último, el valor
never desactiva el inicio automático de la sesión.
Además puede establecer todas las directivas de sesión de PHP (en formato camelCase) y también readAndClose. Ejemplo:
session:
# 'session.name' se escribe como 'name'
name: MYID
# 'session.save_path' se escribe como 'savePath'
savePath: "%tempDir%/sessions"
Cookie de sesión
La cookie de sesión se envía con los mismos parámetros que las demás cookies, pero puede cambiarlos específicamente para ella:
session:
# dominios que pueden recibir la cookie
cookieDomain: 'example.com' # (string|domain)
# restricción para el acceso cross-origin
cookieSamesite: None # (Strict|Lax|None) el valor predeterminado es Lax
El atributo cookieSamesite afecta a si la cookie se envía en las peticiones cross-origin, lo que aporta cierta protección
frente a los ataques Cross-Site Request
Forgery (CSRF).
Servicios DI
Estos servicios se añaden al contenedor DI:
| Nombre | Tipo | Descripción |
|---|---|---|
http.request |
Nette\Http\Request | petición HTTP |
http.response |
Nette\Http\Response | respuesta HTTP |
session.session |
Nette\Http\Session | gestión de la sesión |
http.requestFactory |
Nette\Http\RequestFactory | factory que crea la petición HTTP |