Condividi tramite


Filtro delle regole <di filtro richiesteRules>

Panoramica

L'elemento <filteringRules> specifica una raccolta di regole di filtro delle richieste personalizzate. Questo elemento consente agli amministratori di creare regole di filtro personalizzate per il server che estendono la funzionalità di base della funzionalità di filtro delle richieste.

Ogni <filteringRule> elemento specifica una raccolta di attributi e elementi personalizzati che definiscono il comportamento di filtro delle richieste in base ai criteri definiti dall'utente. Ad esempio, ogni regola di filtro delle richieste può contenere gli attributi seguenti:

  • denyUnescapedPercent - Questo attributo specifica se il filtro delle richieste deve negare la richiesta se contiene simboli di percentuale che non vengono eliminati.
  • scanAllRaw - Questo attributo specifica se il filtro delle richieste deve analizzare le intestazioni non elaborate per le stringhe specificate nell'elemento denyStrings .
  • scanQueryString - Questo attributo specifica se il filtro delle richieste deve analizzare la stringa di query per le stringhe specificate nell'elemento denyStrings . Se l'attributo unescapeQueryString dell'elemento <requestFiltering> è impostato su true, verranno eseguite due analisi della stringa di query: una analisi con la stringa di query non elaborata e una seconda analisi con la stringa di query non eseguita.
  • scanUrl - Questo attributo specifica se il filtro delle richieste deve analizzare l'URL per le stringhe specificate nell'elemento denyStrings .

Inoltre, ogni regola di filtro delle richieste può contenere gli elementi figlio seguenti:

  • <appliesTo> - Specifica l'elenco delle estensioni del nome file a cui si applica la regola di filtro delle richieste.

    Nota

    Se questa sezione è vuota, la regola si applica a tutte le richieste.

  • <denyStrings> - Specifica l'elenco di stringhe da negare per la regola di filtro delle richieste.

  • <scanHeaders> - Specifica l'elenco di intestazioni HTTP da analizzare.

Nota

Quando si richiede il filtro blocca una richiesta HTTP a causa di una regola di filtro, IIS 7 restituirà un errore HTTP 404 al client e registrare lo stato HTTP seguente con un substatus univoco che identifica il motivo per cui la richiesta è stata negata:

HTTP Substatus Descrizione
404.19 Negato tramite la regola di filtro

Questo substatus consente agli amministratori Web di analizzare i log IIS e identificare potenziali minacce.

Compatibilità

Versione Note
IIS 10.0 L'elemento <filteringRules> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <filteringRules> non è stato modificato in IIS 8.5.
IIS 8,0 L'elemento <filteringRules> non è stato modificato in IIS 8.0.
IIS 7,5 L'elemento <filteringRules> dell'elemento <requestFiltering> viene fornito come funzionalità di IIS 7.5.
IIS 7.0 L'elemento <filteringRules> dell'elemento è stato introdotto come aggiornamento per IIS 7.0 disponibile tramite l'articolo <requestFiltering> di Microsoft Knowledge Base 957508 (https://support.microsoft.com/kb/957508).
IIS 6.0 L'elemento <filteringRules> è approssimativamente analogo alla funzionalità RuleList aggiunta a URLScan 3.0.

Installazione

L'installazione predefinita di IIS 7 e versioni successive include il servizio ruolo o la funzionalità Di filtro richieste. Se il servizio ruolo o la funzionalità di filtro richieste viene disinstallato, è possibile reinstallarlo usando la procedura seguente.

Windows Server 2012 o Windows Server 2012 R2

  1. Sulla barra delle applicazioni fare clic su Server Manager.
  2. In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
  3. Nella procedura guidata Aggiungi ruoli e funzionalità fare clic su Avanti. Selezionare il tipo di installazione e fare clic su Avanti. Selezionare il server di destinazione e fare clic su Avanti.
  4. Nella pagina Ruoliserver espandere Server Web (IIS), espandere Server Web, espandere Sicurezza e quindi selezionare Filtro richieste. Fare clic su Avanti.
    Screenshot che mostra il riquadro Server Web e Sicurezza espanso con Filtro richiesta selezionato. .
  5. Nella pagina Selezione funzionalità fare clic su Avanti.
  6. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  7. Nella pagina Risultati fare clic su Chiudi.

Windows 8 o Windows 8.1

  1. Nella schermata Start spostare il puntatore nell'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi fare clic su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva le funzionalità di Windows.
  3. Espandere Internet Information Services, espandere Servizi Web a livello mondiale, espandere Sicurezza e quindi selezionare Filtro richieste.
    Screenshot del riquadro Servizi Web a livello mondiale e sicurezza che mostra Il filtro delle richieste evidenziato.
  4. Fare clic su OK.
  5. Fare clic su Close.

Windows Server 2008 o Windows Server 2008 R2

  1. Nella barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione e quindi fare clic su Server Manager.
  2. Nel riquadro della gerarchia di Server Manager espandere Ruoli e quindi fare clic su Server Web (IIS).
  3. Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
  4. Nella pagina Seleziona servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Filtro richieste e quindi fare clic su Avanti.
    Screenshot che visualizza la pagina Seleziona servizi ruolo nella Procedura guidata Aggiungi servizi ruolo con riquadro Sicurezza espanso e Filtro richieste selezionato.
  5. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  6. Nella pagina Risultati fare clic su Chiudi.

Windows Vista o Windows 7

  1. Nella barra delle applicazioni fare clic su Start e quindi fare clic su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
  3. Espandere Internet Information Services, quindi Servizi Web a livello mondiale e quindi Sicurezza.
  4. Selezionare Filtro richieste e quindi fare clic su OK.
    Screenshot che mostra il nodo Sicurezza espanso in Attivare o disattivare le funzionalità di Windows e Richiedere filtro selezionato.

Procedure

Come aggiungere una regola di filtro delle richieste

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Nella barra delle applicazioni fare clic su Server Manager, scegliere Strumenti e quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione e quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Nella barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione e quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Nella barra delle applicazioni fare clic su Start e quindi fare clic su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione e quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni passare al sito, all'applicazione o alla directory per cui si vuole configurare il filtro delle richieste.

  3. Nel riquadro Home fare doppio clic su Filtro richieste.

  4. Nel riquadro Filtro richieste fare clic sulla scheda Regole .
    Screenshot del riquadro Filtro richieste che mostra la scheda Regole. L'opzione Aggiungi regola di filtro viene visualizzata nel riquadro Azioni.

  5. Nel riquadro Azioni fare clic su Aggiungi regola di filtro.

  6. Immettere le informazioni seguenti per la regola di filtro nella finestra di dialogo Aggiungi regola di filtro :

    • Immettere un nome descrittivo per la regola di filtro nel campo Nome .
    • Selezionare Url analisi se si vuole che la regola di filtro analizzi lo stub URL per la richiesta.
    • Selezionare Analizza stringa di query se si vuole che la regola di filtro analizzi la stringa di query per la richiesta.
    • Immettere tutte le intestazioni HTTP da analizzare nell'insieme Scan Headers .
    • Immettere le estensioni del nome file da usare con la regola di filtro nella raccolta Applica a .
    • Immettere la raccolta di stringhe da negare per la regola di filtro nell'insieme Deny Strings .
      Screenshot che mostra la finestra di dialogo Aggiungi regola di filtro con il campo Nome, Scan you are l and Scan query string boxed entrambe selezionate.
  7. Fare clic su OK per chiudere la finestra di dialogo Aggiungi regola di filtro .

Configurazione

L'elemento <filteringRules> dell'elemento <requestFiltering> è configurato a livello di sito, applicazione o directory.

Attributi

Nessuno.

Elementi figlio

Elemento Descrizione
filteringRule Elemento facoltativo.

Aggiunge una regola alla raccolta di regole di filtro delle richieste personalizzate.

Esempio di configurazione

Nell'esempio seguente viene visualizzato un <requestFiltering> elemento che usa gli <denyStrings>elementi , <appliesTo>e <scanHeaders> per definire una regola di filtro delle richieste che impedirà il furto di immagini (leeching) per un agente utente specifico.

<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>

Nell'esempio seguente viene visualizzato un <requestFiltering> elemento che definisce una regola di filtro delle richieste che impedisce attacchi di inserimento SQL negando una raccolta di stringhe di testo nelle stringhe di query spesso usate negli attacchi di inserimento SQL.

<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>

Codice di esempio

Negli esempi seguenti viene illustrato come usare gli <denyStrings>elementi , <appliesTo>e <scanHeaders> per aggiungere una regola di filtro delle richieste per il sito Web predefinito che impedirà il furto di immagini (leeching) per un agente utente specifico. Ecco lo scenario per questo esempio: se si è rilevato che le immagini nel sito Web sono state memorizzate in un determinato agente utente, è possibile creare una regola di filtro delle richieste che nega l'accesso ai file di immagine per tale agente utente specifico. In questo particolare esempio, la regola di filtro delle richieste cerca l'intestazione dell'agente utente HTTP per la stringa "leech-bot" e nega l'accesso ai file GIF, JPG e PNG se l'intestazione dell'agente utente contiene la stringa di ricerca.

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()