nginx: HSTS em uma página com www-authentication

5

É possível, no nginx, enviar um cabeçalho Strict-Transport-Security, mesmo em páginas que requerem autenticação WWW?

Quando eu tenho os dois auth_basic e add_header Strict-Transport-Security "max-age=2592000"; , o cabeçalho HSTS não é enviado:

$ curl -Ik https://****************
HTTP/1.1 401 Unauthorized
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 14 Sep 2014 17:56:08 GMT
Content-Type: text/html
Content-Length: 203
Connection: keep-alive
WWW-Authenticate: Basic realm="*********"

é enviado em uma página diferente, que não requer autenticação, portanto, a diretiva add_header está tendo efeito - não apenas quando requer autenticação.

    
por Valmiky Arquissandas 14.09.2014 / 20:03

2 respostas

5

É possível, mas não com a diretiva add_header , porque não faz nada no caso da resposta 401 Unauthorized.

A descrição da diretiva add_header na documentação ngx_http_headers_module diz:

Adds the specified field to a response header provided that the response code equals 200, 201, 204, 206, 301, 302, 303, 304, or 307. A value can contain variables.

Para enviar o cabeçalho HSTS em todas as páginas, você terá que compilar o nginx com o módulo ngx_headers_more (ou basta instalar o pacote nginx-extras se você estiver usando o Debian), e adicione a seguinte linha ao seu arquivo de configuração do nginx:

more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubDomains";
    
por 11.01.2015 / 15:57
5

A partir do Nginx 1.7.5, lançado em 16 de setembro de 2014, isso é facilmente realizado adicionando o sinalizador " always " à sua diretiva add_header . Módulos extras não são mais necessários. : -)

add_header Strict-Transport-Security "max-age=2592000" always;

Como a add_header documentação explica agora:

If the always parameter is specified (1.7.5), the header field will be added regardless of the response code.

De um dos meus próprios aplicativos da Web (editado):

$ curl -I https://example.com/
HTTP/1.1 401 UNAUTHORIZED
Server: nginx/1.11.3
Date: Wed, 31 Aug 2016 15:37:59 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 17
Connection: keep-alive
WWW-Authenticate: Basic realm="example"
Strict-Transport-Security: max-age=31536000
    
por 31.08.2016 / 17:37

Tags