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'elementodenyStrings
.scanQueryString
- Questo attributo specifica se il filtro delle richieste deve analizzare la stringa di query per le stringhe specificate nell'elementodenyStrings
. Se l'attributounescapeQueryString
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'elementodenyStrings
.
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
- Sulla barra delle applicazioni fare clic su Server Manager.
- In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
- 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.
- Nella pagina Ruoliserver espandere Server Web (IIS), espandere Server Web, espandere Sicurezza e quindi selezionare Filtro richieste. Fare clic su Avanti.
.
- Nella pagina Selezione funzionalità fare clic su Avanti.
- Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
- Nella pagina Risultati fare clic su Chiudi.
Windows 8 o Windows 8.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.
- In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva le funzionalità di Windows.
- Espandere Internet Information Services, espandere Servizi Web a livello mondiale, espandere Sicurezza e quindi selezionare Filtro richieste.
- Fare clic su OK.
- Fare clic su Close.
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 Server Manager.
- Nel riquadro della gerarchia di Server Manager espandere Ruoli e quindi fare clic su Server Web (IIS).
- Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
- Nella pagina Seleziona servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Filtro richieste e quindi fare clic su Avanti.
- Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
- Nella pagina Risultati fare clic su Chiudi.
Windows Vista o Windows 7
- Nella barra delle applicazioni fare clic su Start e quindi fare clic su Pannello di controllo.
- In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
- Espandere Internet Information Services, quindi Servizi Web a livello mondiale e quindi Sicurezza.
- Selezionare Filtro richieste e quindi fare clic su OK.
Procedure
Come aggiungere una regola di filtro delle richieste
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).
Nel riquadro Connessioni passare al sito, all'applicazione o alla directory per cui si vuole configurare il filtro delle richieste.
Nel riquadro Home fare doppio clic su Filtro richieste.
Nel riquadro Filtro richieste fare clic sulla scheda Regole .
Nel riquadro Azioni fare clic su Aggiungi regola di filtro.
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 .
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()