Configurer le filtrage des demandes dans IIS

par Keith Newman et Robert McMurray

Ce document vous montre comment utiliser des paramètres courants de filtrage des demandes pour améliorer la sécurité de votre serveur web IIS 8.

Les filtres de demandes limitent les types de requêtes HTTP traités par IIS 8. En bloquant des requêtes HTTP spécifiques, les filtres de demandes empêchent que des demandes potentiellement nuisibles atteignent le serveur. Le module de filtre des demandes analyse les demandes entrantes et rejette celles qui sont indésirables selon les règles que vous définissez.

Par défaut, IIS rejette les demandes visant à parcourir des segments de code critiques. Sont également rejetées les demandes portant sur certaines extensions de noms de fichiers.

Vous pouvez configurer un filtre des demandes au niveau du serveur, puis remplacer la configuration au niveau du site web.

Prérequis

Pour tirer le meilleur parti de ce tutoriel, vous devez avoir accès à un ordinateur qui exécute l'un des systèmes d'exploitation suivants :

  • Windows Server® 2012
  • Windows® 8

Paramètres généraux de filtrage des demandes

Les paramètres généraux déterminent notamment :

  1. s’il faut autoriser l’accès à un fichier portant une extension qui n’est pas listée pour le filtre des demandes ;
  2. s’il faut autoriser les demandes qui utilisent des verbes HTTP qui ne sont pas listés ;
  3. s’il faut autoriser les demandes qui contiennent des caractères étendus (non-ASCII) ;
  4. s’il faut autoriser les demandes à double encodage ;
  5. la longueur maximale du contenu demandé ;
  6. la longueur maximale de l’URL ;
  7. la taille maximale d’une chaîne de requête.

Pour configurer les options générales de filtre des demandes à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Dans le volet Actions, cliquez sur Modifier les paramètres des fonctionnalités.
  4. Dans la boîte de dialogue Modifier les paramètres de filtrage des demandes, modifiez les paramètres comme vous le souhaitez, puis cliquez sur OK.

Pour configurer les options générales de filtrage des demandes à l’aide de la ligne de commande

Configurer des caractères étendus

Pour configurer des caractères étendus, utilisez la syntaxe suivante :

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

Par exemple, pour autoriser les caractères étendus, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

appcmd set config /section:requestfiltering /allowhighbitcharacters:true

Configurer le double échappement

Pour configurer le double échappement, utilisez la syntaxe suivante :

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

Par exemple, pour activer le double échappement, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

appcmd set config /section:requestfiltering /allowdoubleescaping:true

Configurer la longueur de contenu maximale autorisée

Pour configurer une valeur pour la longueur de contenu maximale autorisée, utilisez la syntaxe suivante :

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:unitéé

La variable requestlimits.maxallowedcontentlength:unit spécifie la longueur maximale du contenu.

Par exemple, pour spécifier 30 000 000 comme longueur maximale du contenu, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Configurer la longueur d’URL maximale autorisée

Pour configurer une valeur pour la longueur maximale autorisée d’une URL entrante, utilisez la syntaxe suivante :

appcmd set config /section:requestfiltering /requestlimits.maxurl:unitéé

La variable requestlimits.maxurl:unit spécifie la longueur maximale d’une URL entrante.

Par exemple, pour spécifier 4 096 comme longueur maximale d’une URL entrante, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Configurer la longueur de chaîne de requête maximale autorisée

Pour configurer une valeur pour la longueur maximale autorisée d’une chaîne de requête entrante, utilisez la syntaxe suivante :

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:unitéé

La variable requestlimits.maxquertystring:unit spécifie la longueur maximale d’une chaîne de requête entrante.

Par exemple, pour spécifier 2 048 comme longueur maximale d’une chaîne de requête entrante, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Configurer la taille maximale d’un en-tête HTTP

Pour configurer une limite de taille pour un en-tête HTTP spécifique, utilisez la syntaxe suivante :

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

La variable header=string spécifie l’en-tête auquel cette restriction s’applique. La variable sizelimit=unit spécifie la taille maximale de l’en-tête.

Par exemple, pour spécifier 2 048 comme taille maximale des en-têtes qui incluent la valeur contoso.com, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Extensions de noms de fichiers

Pour chaque extension de nom de fichier que vous ajoutez, vous pouvez indiquer s’il faut autoriser ou refuser les demandes de ce type de fichier.

Pour configurer les extensions de noms de fichiers à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet Extensions de noms de fichiers.
  4. Dans le volet Actions, cliquez sur Autoriser l’extension de nom de fichier ou Refuser l’extension de nom de fichier.
  5. Tapez l’extension de nom de fichier dans la zone, puis cliquez sur OK.

Pour configurer les extensions de noms de fichiers à l’aide de la ligne de commande

Configurer les extensions de noms de fichiers non listées

Pour configurer la façon dont IIS traite les extensions de noms de fichiers non listées, utilisez la syntaxe suivante :

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

Par exemple, pour refuser les extensions de noms de fichiers non listées, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Configurer pour des demandes WebDAV

Pour configurer et déterminer si les extensions de noms de fichiers s’appliquent aux demandes WebDAV, utilisez la syntaxe suivante :

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

Par exemple, pour configurer IIS pour que les extensions de noms de fichiers ne s’appliquent pas aux demandes WebDAV, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Ajouter ou supprimer une extension de nom de fichier

Pour ajouter une extension de nom de fichier, utilisez la syntaxe suivante :

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

La variable fileextension=string correspond à l’extension de nom de fichier à autoriser ou à refuser.

Par exemple, pour ajouter une règle d’autorisation pour l’extension de nom de fichier .xxx, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Pour supprimer une règle pour l’extension de nom de fichier .xxx, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Règles de filtrage

IIS 8 vous permet de définir des règles de filtrage personnalisées qui s’appliquent aux demandes entrantes. À l’aide de cette fonctionnalité, vous pouvez définir des filtres qui peuvent effectuer les opérations suivantes :

  1. Analyser l’URL de la demande.
  2. Analyser les chaînes de requête contenues dans l’URL.
  3. Analyser des champs d’en-tête spécifiques.
  4. Définir les extensions de noms de fichiers auxquelles le filtre s’applique.
  5. Définir les chaînes à refuser.

Pour configurer une règle de filtrage à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet Règles.
  4. Dans le volet Actions, double-cliquez sur Ajouter une règle de filtrage.
  5. Dans la zone Nom, tapez un nom pour la règle de filtrage.
  6. Si vous voulez que l’URL soit analysée, cochez la case Analyser l’URL.
  7. Si vous voulez que la chaîne de requête soit analysée, cochez la case Analyser la chaîne de requête.
  8. Sous Analyser les en-têtes, tapez un ou plusieurs en-têtes à analyser.
  9. Sous S’applique à, entrez une ou plusieurs extensions de noms de fichiers auxquelles s’applique la règle.
  10. Sous Chaînes de refus, tapez une ou plusieurs chaînes que vous voulez refuser.
  11. Cliquez sur OK.

Segments masqués

Cette fonctionnalité vous permet de rejeter les demandes qui contiennent un segment d’URL (par exemple, un nom de dossier).

Pour configurer des segments masqués à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet Segments masqués.
  4. Dans le volet Actions, cliquez sur Ajouter un segment masqué.
  5. Tapez le segment d’URL dans la zone, puis cliquez sur OK.

Pour configurer des segments masqués à l’aide de la ligne de commande

Configurer pour des demandes WebDAV

Pour configurer et déterminer si les segments masqués s’appliquent aux demandes WebDAV, utilisez la syntaxe suivante :

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

Par exemple, pour configurer IIS afin que les segments masqués ne s’appliquent pas aux demandes WebDAV, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Ajouter un segment masqué

Pour configurer un segment masqué, utilisez la syntaxe suivante :

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

La variable segment=string spécifie un segment d’URL masqué.

Par exemple, pour spécifier que /bin est un segment masqué, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Filtrage d'URL

Vous pouvez configurer IIS pour accepter une URL spécifiée. De plus, vous pouvez le configurer pour refuser une séquence d’URL spécifiée.

Pour configurer le filtrage d’URL à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet URL.
  4. Dans le volet Actions, sélectionnez Autoriser une URL ou Refuser une séquence.
  5. Tapez l’URL ou la séquence d’URL dans la zone, puis cliquez sur OK.

Pour configurer le filtrage d’URL à l’aide de la ligne de commande

Pour refuser une séquence d’URL, utilisez la syntaxe suivante :

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

La variable sequence=string spécifie une séquence de caractères dans une URL qu’IIS n’est jamais autorisé à analyser.

Par exemple, pour spécifier qu’IIS ne doit jamais analyser les URL qui contiennent deux points, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Verbes HTTP

Vous pouvez définir la liste des verbes qu’IIS 8 accepte dans le cadre d’une demande. Quand IIS rejette une demande conformément à cette fonction, le code d’erreur enregistré est 404.6.

Pour configurer des verbes HTTP non listés à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet Verbes HTTP.
  4. Dans le volet Actions, cliquez sur Autoriser un verbe ou Refuser un verbe.
  5. Entrez le verbe dans la zone, puis cliquez sur OK.

Pour configurer des verbes HTTP non listés à l’aide de la ligne de commande

Configurer des verbes HTTP non listés

Pour configurer la façon dont IIS traite les verbes non listés, utilisez la syntaxe suivante :

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

Par exemple, pour refuser les verbes non listés, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Configurer pour des demandes WebDAV

Pour configurer et déterminer si le filtrage des verbes s’applique aux demandes WebDAV, utilisez la syntaxe suivante :

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

Par exemple, pour configurer IIS afin que le filtrage des verbes ne s’applique pas aux demandes WebDAV, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Ajouter un verbe HTTP

Pour configurer un verbe pour le filtrage, utilisez la syntaxe suivante :

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

La variable verb=string spécifie le verbe auquel cette restriction s’applique.

Par exemple, pour spécifier que GET est autorisé, tapez la commande suivante à l’invite de commandes et appuyez sur Entrée :

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

Limites de taille d’en-tête

Vous pouvez limiter la taille des en-têtes de requête HTTP pour améliorer les performances et la sécurité. Les en-têtes sont des paires nom/valeur qui définissent les paramètres d’exploitation d’une transaction HTTP.

Pour configurer les limites de taille d’en-tête à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtre des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet En-têtes, puis cliquez sur Ajouter un en-tête.
  4. Dans la zone En-tête, tapez le nom du champ d’en-tête.
  5. Dans la zone Limite de taille, tapez un nombre entier positif qui représente la limite de taille d’en-tête en octets.
  6. Cliquez sur OK.

Chaînes de requête

Vous pouvez configurer IIS 8 pour autoriser ou refuser des chaînes de requête spécifiques contenues dans l’URL demandée. Par exemple, si une chaîne de requête refusée est détectée dans une URL de demande, la demande est refusée.

Pour configurer des chaînes de requête à l’aide de l’interface utilisateur

  1. Ouvrez le Gestionnaire IIS et sélectionnez le niveau pour lequel vous voulez configurer le filtrage des demandes.
  2. Dans l’affichage Fonctionnalités, double-cliquez sur Filtrage des demandes.
  3. Sélectionnez l’onglet Chaînes de requête et cliquez sur Autoriser la chaîne de requête ou Refuser la chaîne de requête.
  4. Dans la zone Chaîne de requête, tapez la chaîne de requête.
  5. Cliquez sur OK.

Journalisation du filtrage des demandes

Vous pouvez utiliser la journalisation IIS pour évaluer et optimiser votre configuration du filtrage des demandes.

Le tableau suivant montre les codes d’erreur de filtrage des demandes qui s’affichent dans le journal :

Description de l’erreur Code de statut
Filtrage des demandes : séquence d’URL refusée 404,5
Filtrage des demandes : verbe refusé 404,6
Filtrage des demandes : extension de nom de fichier refusée 404,7
Filtrage des demandes : refusé par segment masqué 404,8
Filtrage des demandes : refusé, car l’URL a doublé l’échappement 404,11
Filtrage des demandes : refusé en raison de caractères de bits élevés 404,12
Filtrage des demandes : refusé, car l’URL est trop longue 404,14
Filtrage des demandes : refusé, car la chaîne de requête est trop longue 404,15
Filtrage des demandes : refusé, car la longueur du contenu est trop grande 413.1
Filtrage des demandes : refusé, car l’en-tête de demande est trop long 431

Voir aussi