Configuração HTTP

Visão geral das opções de configuração para Nette HTTP.

Se você não usa o framework inteiro, mas apenas esta biblioteca, leia como carregar a configuração.

Cabeçalhos HTTP

http:
	# cabeçalhos que são enviados com cada requisição
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# afeta o cabeçalho X-Frame-Options
	frames: ...      # (string|bool) padrão é 'SAMEORIGIN'

O framework, por razões de segurança, envia o cabeçalho X-Frame-Options: SAMEORIGIN, que diz que a página só pode ser exibida dentro de outra página (no elemento <iframe>) se estiver no mesmo domínio. Isso pode ser indesejável em algumas situações (por exemplo, se você estiver desenvolvendo uma aplicação para o Facebook), o comportamento pode, portanto, ser alterado definindo frames: http://allowed-host.com ou frames: true.

Content Security Policy

É fácil construir cabeçalhos Content-Security-Policy (doravante CSP), sua descrição pode ser encontrada na descrição do CSP. As diretivas CSP (como script-src) podem ser escritas como strings de acordo com a especificação, ou como um array de valores para melhor legibilidade. Então não é necessário colocar aspas em torno de palavras-chave, como 'self'. Nette também gera automaticamente o valor nonce, então no cabeçalho haverá, por exemplo, 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# string no formato de acordo com a especificação CSP
		default-src: "'self' https://example.com"

		# array de valores
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool no caso de flags
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Nos templates, use <script n:nonce>...</script> e o valor nonce será preenchido automaticamente. Criar sites seguros em Nette é realmente fácil.

Da mesma forma, é possível construir os cabeçalhos Content-Security-Policy-Report-Only (que podem ser usados ​​simultaneamente com CSP) e 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

É possível alterar os valores padrão de alguns parâmetros do método Nette\Http\Response::setCookie() e da sessão.

http:
	# escopo do cookie pelo caminho
	cookiePath: ...          # (string) padrão é '/'

	# domínios que aceitam o cookie
	cookieDomain: 'example.com'  # (string|domain) padrão é não definido

	# enviar cookie apenas via HTTPS?
	cookieSecure: ...        # (bool|auto) padrão é auto

	# desativa o envio do cookie que o Nette usa como proteção contra CSRF
	disableNetteCookie: ...  # (bool) padrão é false

O atributo cookieDomain determina quais domínios podem aceitar o cookie. Se não for especificado, o cookie é aceito pelo mesmo (sub)domínio que o definiu, mas não por seus subdomínios. Se cookieDomain for especificado, os subdomínios também são incluídos. Portanto, especificar cookieDomain é menos restritivo do que omiti-lo.

Por exemplo, com cookieDomain: nette.org, os cookies também estão disponíveis em todos os subdomínios como doc.nette.org. O mesmo pode ser alcançado usando o valor especial domain, ou seja, cookieDomain: domain.

O valor padrão auto para o atributo cookieSecure significa que, se o site estiver rodando em HTTPS, os cookies serão enviados com o sinalizador Secure e, portanto, estarão disponíveis apenas via HTTPS.

Proxy HTTP

Se o site estiver rodando atrás de um proxy HTTP, forneça seu endereço IP para que a detecção de conexão via HTTPS e também o endereço IP do cliente funcionem corretamente. Ou seja, para que as funções Nette\Http\Request::getRemoteAddress() e isSecured() retornem os valores corretos e nos templates sejam gerados links com o protocolo https:.

http:
	# Endereço IP, intervalo (por exemplo, 127.0.0.1/8) ou array desses valores
	proxy: 127.0.0.1       # (string|string[]) padrão é não definido

Sessão

Configurações básicas de sessões:

session:
	# exibir painel de sessão na Tracy Bar?
	debugger: ...        # (bool) padrão é false

	# tempo de inatividade após o qual a sessão expira
	expiration: 14 days  # (string) padrão é '3 hours'

	# quando a sessão deve ser iniciada?
	autoStart: ...       # (smart|always|never) padrão é 'smart'

	# handler, serviço implementando a interface SessionHandlerInterface
	handler: @handlerService

A opção autoStart controla quando a sessão deve ser iniciada. O valor always significa que a sessão será iniciada sempre com o início da aplicação. O valor smart significa que a sessão será iniciada no início da aplicação apenas se já existir, ou no momento em que quisermos ler ou escrever nela. E, finalmente, o valor never proíbe o início automático da sessão.

Além disso, é possível definir todas as diretivas de sessão do PHP (no formato camelCase) e também readAndClose. Exemplo:

session:
	# 'session.name' escrevemos como 'name'
	name: MYID

	# 'session.save_path' escrevemos como 'savePath'
	savePath: "%tempDir%/sessions"

O cookie de sessão é enviado com os mesmos parâmetros que outros cookies, mas você pode alterá-los para ele:

session:
	# domínios que aceitam o cookie
	cookieDomain: 'example.com'   # (string|domain)

	# restrição ao acessar de outro domínio
	cookieSamesite: None          # (Strict|Lax|None) padrão é Lax

O atributo cookieSamesite afeta se o cookie será enviado durante o acesso de outro domínio, o que fornece alguma proteção contra ataques Cross-Site Request Forgery (CSRF).

Serviços DI

Estes serviços são adicionados ao contêiner de DI:

Nome Tipo Descrição
http.request Nette\Http\Request Requisição HTTP
http.response Nette\Http\Response Resposta HTTP
session.session Nette\Http\Session gerenciamento de sessão
versão: 4.0