Configuración HTTP
Resumen de las opciones de configuración para Nette HTTP.
Si no utiliza todo el framework, sino solo esta librería, lea cómo cargar la configuración.
Cabeceras HTTP
http:
# cabeceras que se envían con cada petición
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) el valor por defecto es 'SAMEORIGIN'
El framework, por razones de seguridad, envía la cabecera X-Frame-Options: SAMEORIGIN
, que indica que la página
solo se puede mostrar dentro de otra página (en un elemento <iframe>
) si se encuentra en el mismo dominio.
Esto puede ser no deseado en algunas situaciones (por ejemplo, si está desarrollando una aplicación para Facebook), por lo que
el comportamiento se puede cambiar estableciendo frames: http://allowed-host.com
o frames: true
.
Content Security Policy
Se pueden construir fácilmente las cabeceras Content-Security-Policy
(en adelante CSP), cuya descripción
encontrará en la descripción de CSP. Las directivas CSP (como
script-src
) pueden escribirse como cadenas según la especificación, o como un array de valores para una mejor
legibilidad. Entonces no es necesario escribir comillas alrededor de palabras clave como 'self'
. Nette también
genera automáticamente el valor nonce
, por lo que en la cabecera habrá, por ejemplo,
'nonce-y4PopTLM=='
.
http:
# Content Security Policy
csp:
# cadena en formato según la especificación CSP
default-src: "'self' https://example.com"
# array de valores
script-src:
- nonce
- strict-dynamic
- self
- https://example.com
# bool en caso de interruptores
upgrade-insecure-requests: true
block-all-mixed-content: false
En las plantillas, use <script n:nonce>...</script>
y el valor nonce se completará automáticamente.
Hacer sitios web seguros en Nette es realmente fácil.
De manera similar, se pueden construir las cabeceras Content-Security-Policy-Report-Only
(que se pueden usar
simultáneamente con 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
Cookie HTTP
Se pueden cambiar los valores predeterminados de algunos parámetros del método Nette\Http\Response::setCookie() y de la sesión.
http:
# alcance de la cookie por ruta
cookiePath: ... # (string) el valor por defecto es '/'
# dominios que aceptan la cookie
cookieDomain: 'example.com' # (string|domain) el valor por defecto es no establecido
# ¿enviar cookie solo a través de HTTPS?
cookieSecure: ... # (bool|auto) el valor por defecto es auto
# desactiva el envío de la cookie que Nette usa como protección contra CSRF
disableNetteCookie: ... # (bool) el valor por defecto es false
El atributo cookieDomain
determina qué dominios pueden aceptar la cookie. Si no se especifica, la cookie es
aceptada por el mismo (sub)dominio que la estableció, pero no por sus subdominios. Si se especifica
cookieDomain
, también se incluyen los subdominios. Por lo tanto, especificar cookieDomain
es menos
restrictivo que omitirlo.
Por ejemplo, con cookieDomain: nette.org
, las cookies también están disponibles en todos los subdominios como
doc.nette.org
. Lo mismo se puede lograr también con el valor especial domain
, es decir,
cookieDomain: domain
.
El valor predeterminado auto
para el atributo cookieSecure
significa que si el sitio web se ejecuta
en HTTPS, las cookies se enviarán con el indicador Secure
y, por lo tanto, solo estarán disponibles a través
de HTTPS.
Proxy HTTP
Si el sitio web se ejecuta detrás de un proxy HTTP, especifique su dirección IP para que la detección de la conexión a
través de HTTPS y también la dirección IP del cliente funcionen correctamente. Es decir, para que las funciones Nette\Http\Request::getRemoteAddress() y isSecured() devuelvan los valores correctos y en las plantillas se
generen enlaces con el protocolo https:
.
http:
# Dirección IP, rango (p. ej. 127.0.0.1/8) o array de estos valores
proxy: 127.0.0.1 # (string|string[]) el valor por defecto es no establecido
Sesión
Configuración básica de sesiones:
session:
# ¿mostrar el panel de sesión en Tracy Bar?
debugger: ... # (bool) el valor por defecto es false
# tiempo de inactividad después del cual la sesión expira
expiration: 14 days # (string) el valor por defecto es '3 hours'
# ¿cuándo debe iniciarse la sesión?
autoStart: ... # (smart|always|never) el valor por defecto es 'smart'
# manejador, servicio que implementa la interfaz SessionHandlerInterface
handler: @handlerService
La opción autoStart
controla cuándo debe iniciarse la sesión. El valor always
significa que la
sesión siempre se iniciará cuando se inicie la aplicación. El valor smart
significa que la sesión se iniciará al
inicio de la aplicación solo si ya existe, o en el momento en que queramos leer o escribir en ella. Y finalmente, el valor
never
prohíbe el inicio automático de la sesión.
Además, se pueden configurar 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 otras cookies, pero puede cambiarlos para ella:
session:
# dominios que aceptan la cookie
cookieDomain: 'example.com' # (string|domain)
# restricción al acceder desde otro dominio
cookieSamesite: None # (Strict|Lax|None) el valor por defecto es Lax
El atributo cookieSamesite
afecta si la cookie se enviará al acceder desde otro dominio, lo que proporciona cierta protección
contra 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 sesiones |