Adicione cabeçalhos de resposta HTTP em aplicações web para aumentar a segurança. Este tópico descreve como usar um filtro Envoy para adicionar cabeçalhos de resposta HTTP no Service Mesh (ASM).
Pré-requisitos
Crie uma instância do Service Mesh (ASM) e adicione o cluster ACK a ela. Para mais informações, consulte Criar uma instância do ASM e Adicionar um cluster a uma instância do ASM.
Conecte-se à instância do ASM via kubectl. Para mais informações, consulte Usar kubectl no plano de controle para acessar recursos do Istio.
Implante uma aplicação na instância do ASM. Para mais informações, consulte Implantar uma aplicação em uma instância do ASM.
Defina os recursos necessários do Istio. Para mais informações, consulte Usar recursos do Istio para rotear tráfego para diferentes versões de um serviço.
Informações de fundo
O Open Web Application Security Project (OWASP) fornece melhores práticas e um framework de codificação que descrevem como utilizar cabeçalhos de resposta HTTP para melhorar a segurança das aplicações. A tabela a seguir apresenta os cabeçalhos básicos de resposta HTTP.
Cabeçalho de resposta HTTP | Valor padrão | Descrição |
Content-Security-Policy | frame-ancestors none; | Impede ataques de clickjacking originados de outros sites. |
X-XSS-Protection | 1;mode=block | Ativa o filtro de cross-site scripting (XSS) do navegador, quando disponível, permitindo interromper a renderização ao detectar ataques XSS. |
X-Content-Type-Options | Nosniff | Desativa a detecção de tipo de conteúdo (sniffing) pelo navegador. |
Referrer-Policy | no-referrer | Define que nenhuma informação de referência deve ser enviada junto às requisições. |
X-Download-Options | noopen | Evita que versões antigas do Internet Explorer executem downloads automaticamente. |
X-DNS-Prefetch-Control | off | Desativa o prefetch de DNS para hiperlinks externos nas páginas web. |
Server | envoy | Identifica o servidor que gerou a resposta. O gateway de entrada do Istio define este cabeçalho automaticamente. |
X-Powered-by | N/A | Contém informações sobre ambientes de hospedagem ou frameworks. Não defina este cabeçalho se desejar ocultar o nome e a versão de servidores de aplicação vulneráveis. |
Feature-Policy | camera 'none'; microphone 'none'; geolocation 'none'; encrypted-media 'none'; payment 'none'; speaker 'none'; usb 'none'; | Especifica quais recursos e operações de API ficam disponíveis para os navegadores. |
Este exemplo utiliza a aplicação Bookinfo. Para mais detalhes, consulte Implantar uma aplicação em uma instância do ASM. Execute o comando curl abaixo para consultar os cabeçalhos de resposta HTTP da aplicação:
curl -I http://{IP address of the ingress gateway}/productpage
# Output example
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
content-length: 5183
server: istio-envoy
date: Tue, 28 Jan 2020 08:15:21 GMT
x-envoy-upstream-service-time: 28
A saída do comando mostra que a aplicação não possui nenhum dos cabeçalhos de resposta HTTP listados na tabela anterior. Crie um filtro Envoy para adicionar esses cabeçalhos e fortalecer a segurança da aplicação.
Procedimento
-
Implante um filtro Envoy conforme a versão da sua instância do ASM.
Para instâncias do ASM com versão 1.12.4.0 ou posterior
Implante o filtro Envoy pela página Market Place no console do ASM.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Market Place, clique em Add HTTP response headers. Na página Plugin Detail, clique em Create Plug-in Instance.
Na seção Plugin Effective scope, selecione Gateway Scope e clique em Add ASM Gateway to effective scope.
-
Na caixa de diálogo Add ASM Gateway to effective scope, selecione ingressgateway na seção Select ASM Gateway, clique em no ícone
para mover ingressgateway para a seção selected e clique em OK.Notaingressgateway é o nome do gateway padrão implantado pelo ASM. Selecione outros gateways do ASM caso queira aplicar esse recurso a eles.
-
Na seção Plugin Config, apague todo o conteúdo do editor YAML, ative a opção Plugin Switch e aguarde a ativação do plug-in.
Após a ativação, o ASM cria automaticamente um filtro Envoy.
Para instâncias do ASM com versão anterior a 1.12.4.0
Execute os comandos abaixo para implantar o filtro Envoy:
proxyVersion: Define a versão do Istio à qual o filtro Envoy se aplica. Configure este valor com a sua versão do Istio. Alguns campos do filtro podem ser incompatíveis com certas versões, exigindo ajustes conforme o seu ambiente:Para Istio versão 1,8 ou anterior, defina o parâmetro
proxyVersioncom a sua versão e substituaenvoy.filters.network.http_connection_managerporenvoy.http_connection_manager,envoy.filters.http.routerporenvoy.routeretype.googleapis.com/envoy.extensions.filters.http.lua.v3.Luaportype.googleapis.com/envoy.config.filter.http.lua.v2.Lua.Para Istio versão 1,9 ou posterior, basta definir o parâmetro
proxyVersioncom a sua versão.
-
Execute o comando abaixo para verificar se os cabeçalhos de resposta HTTP foram adicionados corretamente:
Substitua
{IP address of the ingress gateway}pelo endereço IP real do seu gateway de entrada. Para obter esse endereço, consulte a seção "Obter o endereço IP do gateway de entrada" no tópico Usar recursos do Istio para rotear tráfego para diferentes versões de um serviço.curl -I http://{IP address of the ingress gateway}/productpageSaída esperada:
HTTP/1.1 200 OK content-type: text/html; charset=utf-8 content-length: 4183 server: istio-envoy date: Tue, 28 Jan 2020 09:07:01 GMT x-envoy-upstream-service-time: 17 content-security-policy: frame-ancestors none; x-frame-options: deny x-xss-protection: 1; mode=block x-content-type-options: nosniff referrer-policy: no-referrer x-download-options: noopen x-dns-prefetch-control: off feature-policy: camera 'none';microphone 'none';geolocation 'none';encrypted-media 'none';payment 'none';speaker 'none';usb 'none';A saída confirma que a aplicação agora inclui os cabeçalhos básicos de resposta HTTP listados anteriormente.
Perguntas frequentes
Por que não consigo acessar uma aplicação usando uma URL com caracteres especiais?
Os formatos de codificação de caracteres especiais podem não estar em conformidade com as regras de codificação de URL. Por exemplo, o caractere especial Á pode estar usando codificação Unicode em vez de ASCII. Para mais detalhes, consulte Envoy cannot parse non-alphanumeric characters if not urlencoded.