Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Vue d’ensemble
L’élément <filteringRules> spécifie une collection de règles personnalisées de filtrage des demandes. Cet élément permet aux administrateurs de créer des règles de filtrage personnalisées pour leur serveur qui étendent les fonctions de base de la fonctionnalité de filtrage des demandes.
Chaque élément <filteringRule> spécifie une collection des éléments et des attributs personnalisés qui définissent le comportement de filtrage des demandes sur la base des critères définis par l’utilisateur. Par exemple, chaque règle de filtrage des demandes peut contenir les attributs suivants :
denyUnescapedPercent: cet attribut spécifie si le filtrage des demandes doit refuser les demandes comportant des symboles de pourcentage qui ne sont pas mis dans une séquence d’échappement.scanAllRaw: cet attribut spécifie si le filtrage des demandes doit analyser les en-têtes bruts pour y rechercher les chaînes indiquées dans l’élémentdenyStrings.scanQueryString: cet attribut spécifie si le filtrage des demandes doit analyser les chaînes de requête pour y rechercher les chaînes indiquées dans l’élémentdenyStrings. Si l’attributunescapeQueryStringde l’élément<requestFiltering>est défini sur true, deux analyses sont effectuées : une analyse de la chaîne de requête brute et une analyse de la chaîne de requête non mise dans une séquence d’échappement.scanUrl: cet attribut spécifie si le filtrage des demandes doit analyser les URL pour y rechercher les chaînes indiquées dans l’élémentdenyStrings.
De plus, chaque règle de filtrage des demandes peut contenir les éléments enfants suivants :
<appliesTo>: spécifie la liste des extensions de nom de fichier auxquelles s’applique la règle de filtrage des demandes.Remarque
Si cette section est vide, la règle s’applique à toutes les demandes.
<denyStrings>: spécifie la liste des chaînes à refuser pour la règle de filtrage des demandes.<scanHeaders>: spécifie la liste des en-têtes HTTP à analyser.
Remarque
Quand le filtrage des demandes bloque une requête HTTP en raison d’une règle de filtrage, 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.19 |
Refusé par la règle de filtrage |
Ce sous-code d’état permet aux administrateurs web d’analyser leurs journaux IIS et d’identifier les menaces potentielles.
Compatibilité
| Version | Notes |
|---|---|
| IIS 10.0 | L’élément <filteringRules> n’a fait l’objet d’aucune modification dans IIS 10.0. |
| IIS 8.5 | L’élément <filteringRules> n’a fait l’objet d’aucune modification dans IIS 8.5. |
| IIS 8.0 | L’élément <filteringRules> n’a fait l’objet d’aucune modification dans IIS 8.0. |
| IIS 7.5 | L’élément <filteringRules> de l’élément <requestFiltering> est fourni en tant que fonctionnalité d’IIS 7.5. |
| IIS 7.0 | L’élément <filteringRules> de l’élément <requestFiltering> a été introduit dans le cadre d’une mise à jour pour IIS 7.0 qui est disponible via l’article 957508 de la Base de connaissances Microsoft (https://support.microsoft.com/kb/957508). |
| IIS 6.0 | L’élément <filteringRules> est à peu près analogue à la section RuleList qui a été ajoutée à URLScan 3.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
- Dans la barre des tâches, cliquez sur Gestionnaire de serveur.
- Dans le Gestionnaire de serveur, cliquez sur le menu Gérer, puis cliquez sur Ajouter des rôles et des fonctionnalités.
- 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.
- 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.
. - Dans la page Sélectionner les composants, cliquez sur Suivant.
- Dans la page Confirmer les sélections d’installation, cliquez sur Installer.
- Dans la page Résultats , cliquez sur Fermer.
Windows 8 ou Windows 8.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.
- Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis cliquez sur Activer ou désactiver des fonctionnalités Windows.
- Développez tour à tour Internet Information Services, Services World Wide Web et Sécurité, puis sélectionnez Filtrage des demandes.

- Cliquez sur OK.
- Cliquez sur Fermer.
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 de serveur.
- Dans le volet de la hiérarchie du Gestionnaire de serveur, développez Rôles, puis cliquez sur Serveur web (IIS).
- 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.
- 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.

- Dans la page Confirmer les sélections pour l'installation, cliquez sur Installer.
- Dans la page Résultats , cliquez sur Fermer.
Windows Vista ou Windows 7
- Dans la barre des tâches, cliquez sur Démarrer, puis cliquez sur Panneau de configuration.
- Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis cliquez sur Activer ou désactiver des fonctionnalités Windows.
- Développez tour à tour Internet Information Services, Services World Wide Web et Sécurité.
- Sélectionnez Filtrage des demandes, puis cliquez sur OK.

Procédure
Ajouter une règle de filtrage des demandes
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).
Dans le volet Connexions, accédez au site, à l’application ou au répertoire pour lequel vous souhaitez configurer le filtrage des demandes.
Dans le volet Accueil, double-cliquez sur Filtrage des demandes.
Dans le volet Filtrage des demandes, cliquez sur l’onglet Règles.

Dans le volet Actions, cliquez sur Ajouter une règle de filtrage.
Dans la boîte de dialogue Ajouter une règle de filtrage, entrez les informations suivantes pour la règle de filtrage :
- Dans le champ Nom, entrez un nom convivial à donner à la règle de filtrage.
- Sélectionnez Analyser l’URL si vous souhaitez que la règle de filtrage analyse le stub d’URL de la demande.
- Sélectionnez Analyser la chaîne de requête si vous souhaitez que la règle de filtrage analyse la chaîne de requête de la demande.
- Entrez tous les en-têtes HTTP à analyser dans la collection Scan Headers.
- Entrez les extensions de nom de fichier à utiliser avec la règle de filtrage dans la collection Applies To.
- Entrez la collection de chaînes à refuser pour la règle de filtrage dans la collection Deny Strings.

Cliquez sur OK pour fermer la boîte de dialogue Ajouter une règle de filtrage.
Configuration
L’élément <filteringRules> 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 |
|---|---|
filteringRule |
Élément facultatif. Ajoute une règle à la collection des règles personnalisées de filtrage des demandes. |
Exemple Configuration
L’exemple suivant montre l’utilisation d’un élément <requestFiltering> avec les éléments <denyStrings>, <appliesTo> et <scanHeaders> pour définir une règle de filtrage des demandes qui empêche le vol d’image (le leeching) par un agent utilisateur spécifique.
<requestFiltering>
<filteringRules>
<filteringRule name="Block Image Leeching" scanUrl="false" scanQueryString="false" scanAllRaw="false">
<scanHeaders>
<add requestHeader="User-agent" />
</scanHeaders>
<appliesTo>
<add fileExtension=".gif" />
<add fileExtension=".jpg" />
<add fileExtension=".png" />
</appliesTo>
<denyStrings>
<add string="leech-bot" />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>
L’exemple suivant montre l’utilisation d’un élément <requestFiltering> pour définir une règle de filtrage des demandes qui empêche les attaques par injection de code SQL, en refusant une collection de chaînes de texte dans les chaînes de requête qui sont souvent utilisées dans ce type d’attaques.
<requestFiltering>
<filteringRules>
<filteringRule name="SQLInjection" scanUrl="false" scanQueryString="true">
<appliesTo>
<clear />
<add fileExtension=".asp" />
<add fileExtension=".aspx" />
<add fileExtension=".php" />
</appliesTo>
<denyStrings>
<clear />
<add string="--" />
<add string=";" />
<add string="/*" />
<add string="@" />
<add string="char" />
<add string="alter" />
<add string="begin" />
<add string="cast" />
<add string="create" />
<add string="cursor" />
<add string="declare" />
<add string="delete" />
<add string="drop" />
<add string="end" />
<add string="exec" />
<add string="fetch" />
<add string="insert" />
<add string="kill" />
<add string="open" />
<add string="select" />
<add string="sys" />
<add string="table" />
<add string="update" />
</denyStrings>
<scanHeaders>
<clear />
</scanHeaders>
</filteringRule>
</filteringRules>
</requestFiltering>
Exemple de code
Les exemples suivants montrent comment utiliser les éléments <denyStrings>, <appliesTo> et <scanHeaders> pour ajouter une règle de filtrage des demandes sur le site web par défaut qui empêche le vol d’image (le leeching) par un agent utilisateur spécifique. Voici le scénario de cet exemple : si vous avez détecté que des images sur votre site web ont été volées par un agent utilisateur particulier, vous pouvez créer une règle de filtrage des demandes qui refuse l’accès de cet agent utilisateur à vos fichiers image. Dans cet exemple précis, la règle de filtrage des demandes recherche la chaîne « leech-bot » dans l’en-tête HTTP de l’agent utilisateur, et refuse l’accès aux fichiers GIF, JPG et PNG si l’en-tête de l’agent utilisateur contient la chaîne recherchée.
AppCmd.exe
appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"filteringRules.[name='Block Image Leeching',scanUrl='False',scanQueryString='False',scanAllRaw='False']"
appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"filteringRules.[name='Block Image Leeching'].scanHeaders.[requestHeader='User-agent']"
appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"filteringRules.[name='Block Image Leeching'].appliesTo.[fileExtension='.gif']"
appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"filteringRules.[name='Block Image Leeching'].appliesTo.[fileExtension='.jpg']"
appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"filteringRules.[name='Block Image Leeching'].appliesTo.[fileExtension='.png']"
appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"filteringRules.[name='Block Image Leeching'].denyStrings.[string='leech-bot']"
PowerShell
Start-IISCommitDelay
$filteringRules = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigCollection -CollectionName 'filteringRules'
New-IISConfigCollectionElement -ConfigCollection $filteringRules -ConfigAttribute @{ 'name' = 'Block Image Leeching'; 'scanUrl' = $false; 'scanQueryString' = $false; 'scanAllRaw' = $false; }
$Rule = Get-IISConfigCollectionElement -ConfigCollection $filteringRules -ConfigAttribute @{ 'name' = 'Block Image Leeching' }
$ruleScanHeaders = Get-IISConfigCollection -ConfigElement $Rule -CollectionName 'scanHeaders'
New-IISConfigCollectionElement -ConfigCollection $ruleScanHeaders -ConfigAttribute @{ 'requestHeader' = 'User-Agent' }
$ruleAppliesTo = Get-IISConfigCollection -ConfigElement $Rule -CollectionName 'appliesTo'
New-IISConfigCollectionElement -ConfigCollection $ruleAppliesTo -ConfigAttribute @{ 'fileExtension' = '.gif' }
New-IISConfigCollectionElement -ConfigCollection $ruleAppliesTo -ConfigAttribute @{ 'fileExtension' = '.jpg' }
New-IISConfigCollectionElement -ConfigCollection $ruleAppliesTo -ConfigAttribute @{ 'fileExtension' = '.png' }
$ruleDenyStrings = Get-IISConfigCollection -ConfigElement $Rule -CollectionName 'denyStrings'
New-IISConfigCollectionElement -ConfigCollection $ruleDenyStrings -ConfigAttribute @{ 'string' = 'leech-bot' }
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 filteringRulesCollection = requestFilteringSection.GetCollection("filteringRules");
ConfigurationElement filteringRuleElement = filteringRulesCollection.CreateElement("filteringRule");
filteringRuleElement["name"] = @"Block Image Leeching";
filteringRuleElement["scanUrl"] = false;
filteringRuleElement["scanQueryString"] = false;
filteringRuleElement["scanAllRaw"] = false;
ConfigurationElementCollection scanHeadersCollection = filteringRuleElement.GetCollection("scanHeaders");
ConfigurationElement addElement = scanHeadersCollection.CreateElement("add");
addElement["requestHeader"] = @"User-agent";
scanHeadersCollection.Add(addElement);
ConfigurationElementCollection appliesToCollection = filteringRuleElement.GetCollection("appliesTo");
ConfigurationElement addElement1 = appliesToCollection.CreateElement("add");
addElement1["fileExtension"] = @".gif";
appliesToCollection.Add(addElement1);
ConfigurationElement addElement2 = appliesToCollection.CreateElement("add");
addElement2["fileExtension"] = @".jpg";
appliesToCollection.Add(addElement2);
ConfigurationElement addElement3 = appliesToCollection.CreateElement("add");
addElement3["fileExtension"] = @".png";
appliesToCollection.Add(addElement3);
ConfigurationElementCollection denyStringsCollection = filteringRuleElement.GetCollection("denyStrings");
ConfigurationElement addElement4 = denyStringsCollection.CreateElement("add");
addElement4["string"] = @"leech-bot";
denyStringsCollection.Add(addElement4);
filteringRulesCollection.Add(filteringRuleElement);
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 filteringRulesCollection As ConfigurationElementCollection = requestFilteringSection.GetCollection("filteringRules")
Dim filteringRuleElement As ConfigurationElement = filteringRulesCollection.CreateElement("filteringRule")
filteringRuleElement("name") = "Block Image Leeching"
filteringRuleElement("scanUrl") = False
filteringRuleElement("scanQueryString") = False
filteringRuleElement("scanAllRaw") = False
Dim scanHeadersCollection As ConfigurationElementCollection = filteringRuleElement.GetCollection("scanHeaders")
Dim addElement As ConfigurationElement = scanHeadersCollection.CreateElement("add")
addElement("requestHeader") = "User-agent"
scanHeadersCollection.Add(addElement)
Dim appliesToCollection As ConfigurationElementCollection = filteringRuleElement.GetCollection("appliesTo")
Dim addElement1 As ConfigurationElement = appliesToCollection.CreateElement("add")
addElement1("fileExtension") = ".gif"
appliesToCollection.Add(addElement1)
Dim addElement2 As ConfigurationElement = appliesToCollection.CreateElement("add")
addElement2("fileExtension") = ".jpg"
appliesToCollection.Add(addElement2)
Dim addElement3 As ConfigurationElement = appliesToCollection.CreateElement("add")
addElement3("fileExtension") = ".png"
appliesToCollection.Add(addElement3)
Dim denyStringsCollection As ConfigurationElementCollection = filteringRuleElement.GetCollection("denyStrings")
Dim addElement4 As ConfigurationElement = denyStringsCollection.CreateElement("add")
addElement4("string") = "leech-bot"
denyStringsCollection.Add(addElement4)
filteringRulesCollection.Add(filteringRuleElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";
var requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var filteringRulesCollection = requestFilteringSection.ChildElements.Item("filteringRules").Collection;
var filteringRuleElement = filteringRulesCollection.CreateNewElement("filteringRule");
filteringRuleElement.Properties.Item("name").Value = "Block Image Leeching";
filteringRuleElement.Properties.Item("scanUrl").Value = false;
filteringRuleElement.Properties.Item("scanQueryString").Value = false;
filteringRuleElement.Properties.Item("scanAllRaw").Value = false;
var scanHeadersCollection = filteringRuleElement.ChildElements.Item("scanHeaders").Collection;
var addElement = scanHeadersCollection.CreateNewElement("add");
addElement.Properties.Item("requestHeader").Value = "User-agent";
scanHeadersCollection.AddElement(addElement);
var appliesToCollection = filteringRuleElement.ChildElements.Item("appliesTo").Collection;
var addElement1 = appliesToCollection.CreateNewElement("add");
addElement1.Properties.Item("fileExtension").Value = ".gif";
appliesToCollection.AddElement(addElement1);
var addElement2 = appliesToCollection.CreateNewElement("add");
addElement2.Properties.Item("fileExtension").Value = ".jpg";
appliesToCollection.AddElement(addElement2);
var addElement3 = appliesToCollection.CreateNewElement("add");
addElement3.Properties.Item("fileExtension").Value = ".png";
appliesToCollection.AddElement(addElement3);
var denyStringsCollection = filteringRuleElement.ChildElements.Item("denyStrings").Collection;
var addElement4 = denyStringsCollection.CreateNewElement("add");
addElement4.Properties.Item("string").Value = "leech-bot";
denyStringsCollection.AddElement(addElement4);
filteringRulesCollection.AddElement(filteringRuleElement);
adminManager.CommitChanges();
VBScript
Set adminManager = 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 filteringRulesCollection = requestFilteringSection.ChildElements.Item("filteringRules").Collection
Set filteringRuleElement = filteringRulesCollection.CreateNewElement("filteringRule")
filteringRuleElement.Properties.Item("name").Value = "Block Image Leeching"
filteringRuleElement.Properties.Item("scanUrl").Value = False
filteringRuleElement.Properties.Item("scanQueryString").Value = False
filteringRuleElement.Properties.Item("scanAllRaw").Value = False
Set scanHeadersCollection = filteringRuleElement.ChildElements.Item("scanHeaders").Collection
Set addElement = scanHeadersCollection.CreateNewElement("add")
addElement.Properties.Item("requestHeader").Value = "User-agent"
scanHeadersCollection.AddElement(addElement)
Set appliesToCollection = filteringRuleElement.ChildElements.Item("appliesTo").Collection
Set addElement1 = appliesToCollection.CreateNewElement("add")
addElement1.Properties.Item("fileExtension").Value = ".gif"
appliesToCollection.AddElement(addElement1)
Set addElement2 = appliesToCollection.CreateNewElement("add")
addElement2.Properties.Item("fileExtension").Value = ".jpg"
appliesToCollection.AddElement(addElement2)
Set addElement3 = appliesToCollection.CreateNewElement("add")
addElement3.Properties.Item("fileExtension").Value = ".png"
appliesToCollection.AddElement(addElement3)
Set denyStringsCollection = filteringRuleElement.ChildElements.Item("denyStrings").Collection
Set addElement4 = denyStringsCollection.CreateNewElement("add")
addElement4.Properties.Item("string").Value = "leech-bot"
denyStringsCollection.AddElement(addElement4)
filteringRulesCollection.AddElement(filteringRuleElement)
adminManager.CommitChanges()