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

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"

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
versión: 4.0