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
Cookie HTTP
É 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"
Cookie de sessão
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 |