Partager via


Refuser des séquences d’URL <denyUrlSequences>

Vue d’ensemble

L’élément <denyUrlSequences> contient une collection d’éléments <add> qui spécifient les séquences de caractères d’URL qui seront refusés par IIS. L’utilisation de cet élément aide à contrer les attaques par manipulation d’URL sur le serveur web.

Par exemple, la présence de deux points dans une URL (« .. ») indique à un serveur de traiter l’URL dans le répertoire immédiatement supérieur, mais elle peut également indiquer qu’un attaquant tente d’accéder à des zones en dehors de la zone de contenu. Le blocage de ce modèle de caractères permet d’empêcher qu’un attaquant puisse exploiter cette séquence d’URL.

Remarque

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

Sous-code d’état HTTP Description
404.5 Séquence d’URL refusée

Ce sous-code d’état permet aux administrateurs web d’analyser leurs journaux IIS et d’identifier les menaces potentielles.

Remarque

Depuis IIS 7.5, vous pouvez remplacer les séquences d’URL dans la collection <denyUrlSequences> en ajoutant des séquences d’URL à la collection <alwaysAllowedUrls>.

Compatibilité

Version Notes
IIS 10.0 L’élément <denyUrlSequences> n’a fait l’objet d’aucune modification dans IIS 10.0.
IIS 8.5 L’élément <denyUrlSequences> n’a fait l’objet d’aucune modification dans IIS 8.5.
IIS 8.0 L’élément <denyUrlSequences> n’a fait l’objet d’aucune modification dans IIS 8.0.
IIS 7.5 L’élément <denyUrlSequences> n’a fait l’objet d’aucune modification dans IIS 7.5.

Remarque : IIS 7.5 vous permet de remplacer les séquences d’URL dans l’élément <denyUrlSequences> en ajoutant des séquences d’URL à la collection <alwaysAllowedUrls>.
IIS 7.0 L’élément <denyUrlSequences> de la collection <requestFiltering> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <denyUrlSequences> remplace les fonctionnalités [DenyUrlSequences] 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 showing the Windows server 2012 or 2012 R 2 expanded Security (Installed) list. Request Filtering (Installed) is 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 Windows 8 or 8.1 Features dialog. Request Filtering is 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 Windows Server 2008 or 2008 R 2 Add Role Services window. Request Filtering is highlighted.
  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 Windows Vista or Windows 7 Features dialog. Request Filtering is 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 :

Refuser une séquence d’URL

  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 I I S Manager window. The Request Filtering icon is highlighted.

  4. Dans le volet Filtrage des demandes, cliquez sur l’onglet Séquences d’URL refusées, puis cliquez sur Ajouter une séquence d’URL... dans le volet Actions.
    Screenshot of the I I S Manager window showing Request Filtering in the main pane.

  5. Dans la boîte de dialogue Ajouter une séquence de refus, entrez la séquence d’URL que vous souhaitez bloquer, puis cliquez sur OK.
    Screenshot of the Add Deny Sequence dialog.
    Par exemple, pour empêcher la traversée de répertoires sur votre serveur, entrez deux points (« .. ») dans la boîte de dialogue.

Configuration

L’élément <denyUrlSequences> de l’élément <requestFiltering> est configuré au niveau du site, de l’application ou du répertoire.

Attributs

Aucune.

Éléments enfants

Élément Description
add Élément facultatif.

Ajoute une séquence à la collection des séquences d’URL refusées.
clear Élément facultatif.

Supprime toutes les références aux séquences dans la collection <denyUrlSequences>.
remove Élément facultatif.

Supprime une référence à une séquence dans la collection <denyUrlSequences>.

Exemple Configuration

L’exemple de fichier Web.config suivant refuse l’accès à trois séquences d’URL. La première séquence empêche la traversée de répertoires, la deuxième séquence empêche l’accès à d’autres flux de données et la troisième séquence empêche l’utilisation de barres obliques inverses dans les URL.

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <denyUrlSequences>
               <add sequence=".." />
               <add sequence=":" />
               <add sequence="\" />
            </denyUrlSequences>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

L’exemple suivant illustre l’utilisation combinée d’un élément <denyUrlSequences> et d’un élément <alwaysAllowedUrls> pour refuser toutes les URL qui contiennent l’une des deux séquences de caractères spécifiques, mais pour toujours autoriser une URL spécifique qui contient ces deux séquences de caractères spécifiques dans un ordre particulier.

<system.webServer>
   <security>
      <requestFiltering>
         <denyUrlSequences>
            <add sequence="bad" />
            <add sequence="sequence" />
         </denyUrlSequences>
         <alwaysAllowedUrls>
            <add url="/bad_sequence.txt" />
         </alwaysAllowedUrls>
      </requestFiltering>
   </security>
</system.webServer>

Exemple de code

Les exemples de code suivants montrent comment refuser l’accès à trois séquences d’URL pour le site web par défaut : les traversées de répertoires (« .. »), les autres flux de données (« : ») et les barres obliques inverses (« \ »).

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyUrlSequences.[sequence='..']" 

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyUrlSequences.[sequence=':']" 

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyUrlSequences.[sequence='\']"

PowerShell

Start-IISCommitDelay

$denyUrlSequences = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigCollection -CollectionName 'denyUrlSequences'

New-IISConfigCollectionElement -ConfigCollection $denyUrlSequences -ConfigAttribute @{ 'sequence' = '..' }
New-IISConfigCollectionElement -ConfigCollection $denyUrlSequences -ConfigAttribute @{ 'sequence' = ':' }
New-IISConfigCollectionElement -ConfigCollection $denyUrlSequences -ConfigAttribute @{ 'sequence' = '\' }

Stop-IISCommitDelay

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");

         ConfigurationElementCollection denyUrlSequencesCollection = requestFilteringSection.GetCollection("denyUrlSequences");

         ConfigurationElement addElement = denyUrlSequencesCollection.CreateElement("add");
         addElement["sequence"] = @"..";
         denyUrlSequencesCollection.Add(addElement);

         ConfigurationElement addElement1 = denyUrlSequencesCollection.CreateElement("add");
         addElement1["sequence"] = @":";
         denyUrlSequencesCollection.Add(addElement1);

         ConfigurationElement addElement2 = denyUrlSequencesCollection.CreateElement("add");
         addElement2["sequence"] = @"\";
         denyUrlSequencesCollection.Add(addElement2);

         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 denyUrlSequencesCollection As ConfigurationElementCollection = requestFilteringSection.GetCollection("denyUrlSequences")

      Dim addElement As ConfigurationElement = denyUrlSequencesCollection.CreateElement("add")
      addElement("sequence") = ".."
      denyUrlSequencesCollection.Add(addElement)

      Dim addElement1 As ConfigurationElement = denyUrlSequencesCollection.CreateElement("add")
      addElement1("sequence") = ":"
      denyUrlSequencesCollection.Add(addElement1)

      Dim addElement2 As ConfigurationElement = denyUrlSequencesCollection.CreateElement("add")
      addElement2("sequence") = "\"
      denyUrlSequencesCollection.Add(addElement2)

      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 denyUrlSequencesCollection = requestFilteringSection.ChildElements.Item("denyUrlSequences").Collection;

var addElement = denyUrlSequencesCollection.CreateNewElement("add");
addElement.Properties.Item("sequence").Value = "..";
denyUrlSequencesCollection.AddElement(addElement);

var addElement1 = denyUrlSequencesCollection.CreateNewElement("add");
addElement1.Properties.Item("sequence").Value = ":";
denyUrlSequencesCollection.AddElement(addElement1);

var addElement2 = denyUrlSequencesCollection.CreateNewElement("add");
addElement2.Properties.Item("sequence").Value = "\\";
denyUrlSequencesCollection.AddElement(addElement2);

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 denyUrlSequencesCollection = requestFilteringSection.ChildElements.Item("denyUrlSequences").Collection

Set addElement = denyUrlSequencesCollection.CreateNewElement("add")
addElement.Properties.Item("sequence").Value = ".."
denyUrlSequencesCollection.AddElement(addElement)

Set addElement1 = denyUrlSequencesCollection.CreateNewElement("add")
addElement1.Properties.Item("sequence").Value = ":"
denyUrlSequencesCollection.AddElement(addElement1)

Set addElement2 = denyUrlSequencesCollection.CreateNewElement("add")
addElement2.Properties.Item("sequence").Value = "\"
denyUrlSequencesCollection.AddElement(addElement2)

adminManager.CommitChanges()