Configurar a filtragem de solicitações no IIS

de Keith Newman e Robert McMurray

Este documento mostra como usar configurações de filtro de solicitação comuns para melhorar a segurança do seu servidor Web IIS 8.

Os filtros de solicitação restringem os tipos de solicitações HTTP que o IIS 8 processa. Bloqueando as solicitações de HTTP específicas, os filtros de solicitação ajudam bastante a impedir que as solicitações nocivas se conectem ao servidor. O módulo de filtro de solicitação verifica as solicitações de entrada e recusa as solicitações indesejadas com base nas regras que você configurar.

Por padrão, o IIS rejeita solicitações para procurar por segmentos de código críticos. Ele também recusa solicitações para algumas extensões de nome de arquivo.

Você pode configurar um filtro de solicitação na extensão de servidor e, em seguida, substituir a configuração em nível de site.

Pré-requisitos

Para aproveitar ao máximo este tutorial, você deve ter acesso a um computador com um dos seguintes sistemas operacionais:

  • Windows Server ® 2012
  • Windows® 8

Configurações do filtro de solicitação geral

As configurações gerais incluem as configurações conforme o seguinte:

  1. Se deseja permitir acesso a um arquivo com uma extensão que não está listada para o filtro de solicitação.
  2. Se deseja permitir solicitações que usem verbos HTTP que não estão listados.
  3. Se deseja permitir solicitações que contenham caracteres de bit alto (não ASCII).
  4. Se deseja permitir solicitações que são codificadas duas vezes.
  5. Tamanho máximo do conteúdo solicitado.
  6. Tamanho máximo da URL.
  7. Tamanho máximo de uma cadeia de caracteres de consulta.

Para configurar opções de filtro de solicitação geral usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. No painel Ações, clique em Editar Configurações de Recurso.
  4. Na caixa de diálogo Editar Configurações de Filtragem de Solicitações, edite as configurações conforme desejado e clique em OK.

Para configurar as opções de filtro de solicitação geral usando a linha de comando

Configurar caracteres de bit alto

Para configurar caracteres de alto bit, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /allowhighbitcharacters:true|false

Por exemplo, para permitir caracteres de alto bit, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /allowhighbitcharacters:true

Configurar saída dupla

Para configurar saída dupla, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /allowdoubleescaping:true|false

Por exemplo, para permitir saída dupla, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /allowdoubleescaping:true

Configurar o comprimento máximo de conteúdo permitido

Para configurar um valor para o tamanho máximo permitido de conteúdo, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:unidade

A variável requestlimits.maxallowedcontentlength:unit especifica o comprimento máximo do conteúdo.

Por exemplo, para especificar 30000000 como o tamanho máximo do conteúdo, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:30000000

Configurar o comprimento máximo de URL permitido

Para configurar um valor para o tamanho máximo permitido de uma URL de entrada, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /requestlimits.maxurl:unidade

A variável requestlimits.maxurl:unit especifica o comprimento máximo da URL de chegada.

Por exemplo, para especificar 4096 como o número máximo de comprimento da URL de entrada, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /requestlimits.maxurl:4096

Configurar o comprimento máximo permitido da cadeia de caracteres da consulta

Para configurar um valor para o tamanho máximo permitido de uma cadeia de caracteres de consulta de entrada, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:unidade

A variável requestlimits.maxquertystring:unit especifica o comprimento máximo da cadeia de caracteres de consulta.

Por exemplo, para especificar 2048 como o número máximo de cadeia de caracteres de consulta de entrada, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:2048

Configurar o tamanho máximo para um cabeçalho HTTP

Para configurar um limite de tamanho para um determinado cabeçalho HTTP, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='string',sizelimit='unit']

A variável header=string especifica o cabeçalho ao qual essa restrição se aplica. A variável sizelimit=unit especifica o tamanho máximo deste cabeçalho.

Por exemplo, para especificar o tamanho máximo de 2048 para os cabeçalhos que incluem um valor de contoso.com, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='contoso.com',sizelimit='2048']

Extensões de nome de arquivo

Para cada extensão de nome de arquivo que você adicionar, você pode indicar se deseja permitir ou rejeitar solicitações para esse tipo de arquivo.

Para configurar extensões de nome de arquivo usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia Extensões de Nome de arquivo.
  4. No painel Ações, clique em Permitir Extensão de Nome de Arquivo ou Negar Extensão de Nome de Arquivo.
  5. Digite a extensão de nome de arquivo na caixa e clique em OK.

Para configurar as extensões de nome de arquivo usando a linha de comando

Configurar extensões de nome de arquivo não listadas

Para configurar como o IIS lida com extensões de nome de arquivo não listadas, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:true|false

Por exemplo, para negar extensões de nome de arquivo não listadas, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:false

Configurar para solicitações WebDAV

Para configurar se as extensões de nome de arquivo se aplicam a solicitações WebDAV, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:true|false

Por exemplo, para configurar o IIS para que as extensões de nome de arquivo não se apliquem às solicitações WebDAV, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:false

Adicionar ou remover uma extensão de nome de arquivo

Para adicionar uma extensão de nome de arquivo, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='cadeia de caracteres',allowed='true | false']

A variável fileextension=string é a extensão do nome de arquivo que você deseja permitir ou negar.

Por exemplo, para adicionar uma regra de permissão à extensão de nome de arquivo .xxx, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='.xxx',allowed='true']

Para remover uma regra para a extensão de nome de arquivo .xxx, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /-fileExtensions.[fileextension='.xxx']

Regras de filtragem

O IIS 8 permite que você defina regras de filtro customizado que se apliquem às solicitações de entrada. Usando este recurso, você pode definir filtros que podem fazer o seguinte:

  1. Examinar a solicitação URL.
  2. Verificar se há cadeias de caracteres de consulta contidas na URL.
  3. Verificar campos específicos de cabeçalho.
  4. Definir a quais extensões de nome de arquivo o filtro se aplica.
  5. Definir as cadeias de caracteres que você deseja negar.

Para configurar uma regra de filtragem usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia Regras.
  4. No painel Ações, clique duas vezes em Adicionar Filtro de Regra.
  5. Na caixa Nome, digite um nome para a regra de filtragem.
  6. Se quiser a URL digitalizada, marque a caixa de seleção Examinar URL.
  7. Se quiser que a cadeia de caracteres de consulta seja verificada, marque a caixa de seleçãoExaminar cadeia de caracteres de consulta.
  8. Em Examinar Cabeçalhos, digite um ou mais cabeçalhos para fazer a verificação.
  9. Sob Aplica-se a, digite uma ou mais extensões de nome de arquivo às quais a regra se aplica.
  10. Em Negar Cadeias de Caracteres, digite uma ou mais cadeias que você deseja negar.
  11. Clique em OK.

Segmentos ocultos

Esse recurso permite que você rejeite as solicitações que contêm um segmento de URL (por exemplo, um nome de pasta).

Para configurar segmentos ocultos usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia Segmentos ocultos.
  4. No painel Ações, clique em Adicionar Segmento Oculto.
  5. Digite o segmento de URL na caixa e clique em OK.

Para configurar segmentos ocultos usando a linha de comando

Configurar para solicitações WebDAV

Para configurar se os segmentos ocultos se aplicam a solicitações WebDAV, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:true|false

Por exemplo, para configurar o IIS para que segmentos ocultos não se apliquem às solicitações WebDAV, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:false

Adicionar um segmento oculto

Para configurar um segmento oculto, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /+hiddensegments.[segment='cadeia de caracteres']

A variável segment=string especifica um segmento de URL que está oculto.

Por exemplo, para especificar que /bin é um segmento oculto, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /+hiddensegments.[segment='/bin']

Filtragem de URL

Você pode configurar o IIS para aceitar uma URL especificada. Além disso, você pode configurá-lo para negar uma sequência de URL especificada.

Para configurar a filtragem de URL usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia URL .
  4. No painel Ações, selecione Permitir URL ou Negar Sequência.
  5. Digite a URL ou a sequência de URL na caixa e clique em OK.

Para configurar a filtragem de URL usando a linha de comando

Para negar uma sequência de URL, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='cadeia de caracteres']

A variável sequence=string especifica uma sequência de caracteres em uma URL que o IIS nunca tem permissão para analisar.

Por exemplo, para especificar que o IIS nunca analisa URLs que contêm dois períodos, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='..']

Verbos HTTP

Você pode definir uma lista de verbos que o IIS 8 aceite como parte de uma solicitação. Quando o IIS rejeitar uma solicitação de acordo com esse recurso, o código de erro registrado será 404.6.

Para configurar os verbos HTTP não listados usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia Verbos HTTP.
  4. No painel Ações, clique em Permitir verbo ou Negar verbo.
  5. Insira o verbo na caixa e clique em OK.

Para configurar os verbos HTTP não listados usando a linha de comando

Configurar verbos HTTP não listados

Para configurar como o IIS lida com verbos não listados, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /verbs.allowunlisted:true|false

Por exemplo, para negar verbos não listados, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /verbs.allowunlisted:false

Configurar para solicitações WebDAV

Para configurar se a filtragem de verbo se aplica às solicitações WebDAV, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /verbs.applyToWebDAV:true|false

Por exemplo, para configurar o IIS para que a filtragem de verbo não se aplique às solicitações WebDAV, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /verbs.applyToWebDAV:false

Adicionar um verbo HTTP

Para configurar um verbo para filtrar, use a seguinte sintaxe:

appcmd set config /section:requestfiltering /+verbs.[verb='string',allowed='true|false']

A variável verb=string especifica o verbo ao qual essa restrição se aplica.

Por exemplo, para especificar que o GET é permitido, digite o seguinte comando no prompt de comando e pressione ENTER:

appcmd set config /section:requestfiltering /+verbs.[verb='GET',allowed='true']

Limites de tamanho de cabeçalho

Você pode limitar o tamanho dos cabeçalhos de solicitação HTTP para melhorar o desempenho e a segurança. Os cabeçalhos são pares nome/valor que definem os parâmetros operacionais de uma transação HTTP.

Para configurar limites de tamanho de cabeçalho usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível para o qual você deseja configurar o filtro de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia Cabeçalhos e clique em Adicionar cabeçalho.
  4. Na caixa Cabeçalho, digite o nome do campo de cabeçalho.
  5. Na caixa Limite de tamanho, digite um número inteiro positivo que represente o limite de tamanho do cabeçalho em bytes.
  6. Clique em OK.

Consultar cadeia de caracteres

Você pode configurar IIS 8 para permitir ou negar as cadeias de caracteres de consulta específicas contidas na URL solicitada. Por exemplo, se uma cadeia de caracteres de consulta negada for encontrada em uma URL de solicitação, a solicitação será negada.

Para configurar as cadeias de caracteres de consulta usando a interface do usuário

  1. Abra o Gerenciador do IIS e selecione o nível no qual você deseja configurar a filtragem de solicitação.
  2. Em Exibição de Recursos, clique duas vezes em Filtragem de Solicitações.
  3. Selecione a guia Cadeias de Caracteres de Consulta e clique em Permitir Cadeia de Caracteres de Consulta ou Negar Cadeia de Caracteres de Consulta.
  4. Na caixa Cadeia de caracteres de consulta, digite a cadeia de caracteres de consulta.
  5. Clique em OK.

Registro em log do filtro de solicitação

Você pode usar o registro em log do IIS para avaliar e otimizar sua configuração do filtro de solicitação.

A tabela a seguir mostra os códigos de erro de filtro de solicitação que você vê no log:

Descrição do erro Código do Status
Filtragem de Solicitações: sequência de URL negada 404,5
Filtragem de Solicitações: verbo negado 404,6
Filtragem de Solicitações: extensão de nome de arquivo negada 404,7
Filtragem de Solicitações: negado por segmento oculto 404,8
Filtragem de Solicitações: negado porque a URL possui saída dupla 404,11
Filtragem de Solicitações: negado devido a caracteres de bit alto 404,12
Filtragem de Solicitações: negado porque a URL é muito longa 404,14
Filtragem de Solicitações: negado porque a cadeia de caracteres é muito longa 404,15
Filtragem de Solicitações: negado porque o comprimento do conteúdo é muito grande 413.1
Filtragem de Solicitações: negado porque o cabeçalho da solicitação é muito longo. 431

Confira também