Limites des demandes <requestLimits>

Vue d’ensemble

L’élément <requestLimits> spécifie les limites pour les requêtes HTTP qui sont traitées par le serveur web. Ces limites incluent la taille maximale d’une demande, la longueur maximale d’une URL et la longueur maximale d’une chaîne de requête. De plus, l’élément <requestLimits> peut contenir une collection des limites d’en-tête HTTP définies par l’utilisateur dans l’élément <headerLimits>, ce qui vous permet de définir des paramètres personnalisés pour les en-têtes HTTP.

Remarque

Quand le filtrage des demandes bloque une requête HTTP en raison du dépassement des limites de demande, IIS 7 renvoie une erreur HTTP 404 au client et journalise l’un des états HTTP suivants avec un sous-code d’état unique qui identifie le motif du refus de la requête :

Sous-code d’état HTTP Description
404.14 URL trop longue
404.15 Chaîne de requête trop longue
413.1 Longueur du contenu trop grande

Ces sous-codes d’état permettent aux administrateurs web d’analyser leurs journaux IIS et d’identifier les menaces potentielles.

De plus, quand une requête HTTP dépasse les limites d’en-tête définies dans l’élément <headerLimits>, IIS 7 renvoie au client une erreur HTTP 404 avec le sous-code d’état suivant :

Sous-code d’état HTTP Description
431 En-tête de demande trop long

Compatibilité

Version Notes
IIS 10.0 L’élément <requestLimits> n’a fait l’objet d’aucune modification dans IIS 10.0.
IIS 8.5 L’élément <requestLimits> n’a fait l’objet d’aucune modification dans IIS 8.5.
IIS 8.0 L’élément <requestLimits> n’a fait l’objet d’aucune modification dans IIS 8.0.
IIS 7.5 L’élément <requestLimits> n’a fait l’objet d’aucune modification dans IIS 7.5.
IIS 7.0 L’élément <requestLimits> de la collection <requestFiltering> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <requestLimits> remplace les fonctionnalités [RequestLimits] disponibles dans UrlScan pour IIS 6.0.

Programme d’installation

L’installation par défaut d’IIS 7 et des versions ultérieures inclut le service de rôle ou la fonctionnalité Filtrage des demandes. Si le service de rôle ou la fonctionnalité Filtrage des demandes a été désinstallé, vous pouvez le réinstaller en effectuant les étapes suivantes.

Windows Server 2012 ou Windows Server 2012 R2

  1. Dans la barre des tâches, cliquez sur Gestionnaire de serveur.
  2. Dans le Gestionnaire de serveur, cliquez sur le menu Gérer, puis cliquez sur Ajouter des rôles et des fonctionnalités.
  3. Dans l’Assistant Ajout de rôles et de fonctionnalités, cliquez sur Suivant. Sélectionnez le type d’installation, puis cliquez sur Suivant. Sélectionnez le serveur de destination, puis cliquez sur Suivant.
  4. Dans la page Rôles serveur, développez tour à tour Serveur web (IIS), Serveur web et Sécurité, puis sélectionnez Filtrage des demandes. Sélectionnez Suivant.
    Screenshot of the Request Filtering option being highlighted. .
  5. Dans la page Sélectionner les composants, cliquez sur Suivant.
  6. Dans la page Confirmer les sélections d’installation, cliquez sur Installer.
  7. Dans la page Résultats , cliquez sur Fermer.

Windows 8 ou Windows 8.1

  1. Dans l’écran d’accueil, déplacez le pointeur jusqu’au coin inférieur gauche, cliquez avec le bouton droit sur le bouton Démarrer, puis cliquez sur Panneau de configuration.
  2. Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis cliquez sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez tour à tour Internet Information Services, Services World Wide Web et Sécurité, puis sélectionnez Filtrage des demandes.
    Screenshot of the Request Filtering folder being highlighted.
  4. Cliquez sur OK.
  5. Cliquez sur Fermer.

Windows Server 2008 ou Windows Server 2008 R2

  1. Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire de serveur.
  2. Dans le volet de la hiérarchie du Gestionnaire de serveur, développez Rôles, puis cliquez sur Serveur web (IIS).
  3. Dans le volet Serveur web (IIS), faites défiler le contenu jusqu’à la section Services de rôle, puis cliquez sur Ajouter des services de rôle.
  4. Dans la page Sélectionner des services de rôle de l’Assistant Ajout de services de rôle, sélectionnez Filtrage des demandes, puis cliquez sur Suivant.
    Screenshot of the Request Filtering option being highlighted and the only selected option.
  5. Dans la page Confirmer les sélections pour l'installation, cliquez sur Installer.
  6. Dans la page Résultats , cliquez sur Fermer.

Windows Vista ou Windows 7

  1. Dans la barre des tâches, cliquez sur Démarrer, puis cliquez sur Panneau de configuration.
  2. Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis cliquez sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez tour à tour Internet Information Services, Services World Wide Web et Sécurité.
  4. Sélectionnez Filtrage des demandes, puis cliquez sur OK.
    Screenshot of the Request Filtering folder being selected and highlighted.

Procédure

Remarque pour les utilisateurs d’IIS 7.0 : Certaines étapes décrites dans cette section peuvent nécessiter l’installation du Pack d’administration Microsoft pour IIS 7.0, qui inclut une interface utilisateur pour le filtrage des demandes. Vous pouvez installer le Pack d’administration Microsoft pour IIS 7.0 à partir de l’URL suivante :

Modifier les paramètres du filtrage des demandes et les limites des demandes

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis cliquez sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, accédez à la connexion, au site, à l’application ou au répertoire pour lequel vous souhaitez modifier les paramètres de filtrage des demandes.

  3. Dans le volet Accueil, double-cliquez sur Filtrage des demandes.
    Screenshot of the Default Web Site Home screen's Home pane.

  4. Cliquez sur Modifier les paramètres de la fonctionnalité... dans le volet Actions.
    Screenshot of the Request Filtering screen, showing the File Name Extensions and Hidden Segment tab.

  5. Spécifiez les options souhaitées, puis cliquez sur OK.
    Screenshot of the Edit Request Filtering Settings dialog box, showing four selectable fields. Par exemple, vous pouvez apporter les modifications suivantes :

    • Changer la longueur maximale des URL à 2 Ko en spécifiant la valeur 2048.
    • Changer la longueur de chaîne de requête maximale à 1 Ko en spécifiant la valeur 1024.
    • Refuser l’accès aux verbes HTTP non listés en décochant la case Autoriser les verbes non listés.

Ajouter des limites pour les en-têtes HTTP

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis cliquez sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, accédez à la connexion, au site, à l’application ou au répertoire pour lequel vous souhaitez modifier les paramètres de filtrage des demandes.

  3. Dans le volet Accueil, double-cliquez sur Filtrage des demandes.
    Screenshot of the Default Web Site Home screen, showing the Failed Request Tracing Rules, Handler Mappings, and H T T P Redirect options.

  4. Dans le volet Filtrage des demandes, cliquez sur l’onglet En-têtes, puis cliquez sur Ajouter un en-tête... dans le volet Actions.
    Screenshot of the Request Filtering pane, showing the H T T P Verbs and Headers tabs.

  5. Dans la boîte de dialogue Ajouter un en-tête, entrez l’en-tête HTTP et la limite de taille maximale souhaitée pour l’en-tête, puis cliquez sur OK.
    Screenshot of the Add Header dialog box, showing the Header and Size limit fields.

    Par exemple, l’en-tête « Content-type » contient le type MIME d’une demande. Par exemple, si vous entrez la valeur 100, la longueur de l’en-tête « Content-type » sera limitée à 100 octets.

Configuration

Attributs

Attribut Description
maxAllowedContentLength Attribut uint facultatif.

Spécifie la longueur maximale de contenu dans une demande, en octets.

La valeur par défaut est 30000000, soit environ 28,6 Mo.
maxQueryString Attribut uint facultatif.

Spécifie la longueur maximale de la chaîne de requête, en octets.

La valeur par défaut est 2048.
maxUrl Attribut uint facultatif.

Spécifie la longueur maximale de l’URL, en octets.

La valeur par défaut est 4096.

Éléments enfants

Élément Description
headerlimits Élément facultatif.

Spécifie les limites de taille pour les en-têtes HTML.

Exemple Configuration

L’exemple de fichier Web.config suivant configure IIS pour refuser l’accès des demandes HTTP où la longueur de l’en-tête « Content-type » est supérieure à 100 octets.

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <requestLimits>
               <headerLimits>
                  <add header="Content-type" sizeLimit="100" />
               </headerLimits>
            </requestLimits>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

Exemple de code

Les exemples de code suivants configurent IIS pour refuser l’accès des demandes HTTP où la longueur de l’en-tête « Content-type » est supérieure à 100 octets.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"requestLimits.headerLimits.[header='Content-type',sizeLimit='100']"

PowerShell

$requestLimits = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigElement -ChildElementName 'requestLimits'
$headerLimits = Get-IISConfigCollection -ConfigElement $requestLimits -CollectionName 'headerLimits'
New-IISConfigCollectionElement -ConfigCollection $headerLimits -ConfigAttribute @{ 'header'='Content-Type'; 'sizeLimit'=100 }

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");
         ConfigurationElement requestLimitsElement = requestFilteringSection.GetChildElement("requestLimits");
         ConfigurationElementCollection headerLimitsCollection = requestLimitsElement.GetCollection("headerLimits");

         ConfigurationElement addElement = headerLimitsCollection.CreateElement("add");
         addElement["header"] = @"Content-type";
         addElement["sizeLimit"] = 100;
         headerLimitsCollection.Add(addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim requestFilteringSection As ConfigurationSection = config.GetSection("system.webServer/security/requestFiltering")
      Dim requestLimitsElement As ConfigurationElement = requestFilteringSection.GetChildElement("requestLimits")
      Dim headerLimitsCollection As ConfigurationElementCollection = requestLimitsElement.GetCollection("headerLimits")

      Dim addElement As ConfigurationElement = headerLimitsCollection.CreateElement("add")
      addElement("header") = "Content-type"
      addElement("sizeLimit") = 100
      headerLimitsCollection.Add(addElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";
var requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site");

var requestLimitsElement = requestFilteringSection.ChildElements.Item("requestLimits");
var headerLimitsCollection = requestLimitsElement.ChildElements.Item("headerLimits").Collection;

var addElement = headerLimitsCollection.CreateNewElement("add");
addElement.Properties.Item("header").Value = "Content-type";
addElement.Properties.Item("sizeLimit").Value = 100;
headerLimitsCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"
Set requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set requestLimitsElement = requestFilteringSection.ChildElements.Item("requestLimits")
Set headerLimitsCollection = requestLimitsElement.ChildElements.Item("headerLimits").Collection

Set addElement = headerLimitsCollection.CreateNewElement("add")
addElement.Properties.Item("header").Value = "Content-type"
addElement.Properties.Item("sizeLimit").Value = 100
headerLimitsCollection.AddElement(addElement)

adminManager.CommitChanges()