Verweigerung von URL-Sequenzen <denyUrlSequences>
Übersicht
Das <denyUrlSequences>
-Element enthält eine Auflistung von <add>
-Elementen, die Sequenzen von URL-Zeichen angeben, die IIS verweigert, wodurch URL-basierte Angriffe auf dem Webserver verhindert werden.
Die Verwendung von zwei Zeiträumen in einer URL („..“) weist z. B. einen Server an, die URL im nächsten höheren Verzeichnis zu verarbeiten, kann aber auch darauf hinweisen, dass ein Angreifer versucht, Zugriff auf Bereiche außerhalb des Inhaltsbereichs zu erhalten. Durch das Blockieren dieses Zeichenmusters wird die Chance eines Angreifers, diese URL-Sequenz auszunutzen, entfernt.
Hinweis
Wenn die Anforderungsfilterung eine HTTP-Anforderung aufgrund einer verweigerten URL-Sequenz blockiert, gibt IIS 7 einen HTTP 404-Fehler an den Client zurück und protokolliert den folgenden HTTP-Status mit einem eindeutigen Unterstatus, der den Grund identifiziert, warum die Anforderung verweigert wurde:
HTTP-Substatus | Beschreibung |
---|---|
404.5 |
Abgelehnte URL-Sequenz |
Mit diesem Unterstatus können Webadministratoren ihre IIS-Protokolle analysieren und potenzielle Bedrohungen identifizieren.
Hinweis
Ab IIS 7.5 können Sie die URL-Sequenzen in der <denyUrlSequences>
-Auflistung überschreiben, indem Sie der <alwaysAllowedUrls>
-Auflistung URL-Sequenzen hinzufügen.
Kompatibilität
Version | Hinweise |
---|---|
IIS 10.0 | Das <denyUrlSequences> Element wurde in IIS 10.0 nicht geändert. |
IIS 8.5 | Das <denyUrlSequences> Element wurde in IIS 8.5 nicht geändert. |
IIS 8.0 | Das <denyUrlSequences> Element wurde in IIS 8.0 nicht geändert. |
IIS 7.5 | Das <denyUrlSequences> -Element wurde in IIS 7.5 nicht geändert.Hinweis: Mit IIS 7.5 können Sie die URL-Sequenzen im <denyUrlSequences> -Element überschreiben, indem Sie der <alwaysAllowedUrls> -Auflistung URL-Sequenzen hinzufügen. |
IIS 7.0 | Das <denyUrlSequences> -Element der <requestFiltering> -Auflistung wurde in IIS 7.0 eingeführt. |
IIS 6.0 | Das <denyUrlSequences> -Element ersetzt die IIS 6.0 UrlScan [DenyUrlSequences] -Features. |
Setup
Die Standardinstallation von IIS 7 und höher umfasst den Rollendienst oder das Feature Anforderungsfilterung. Wenn der Rollendienst für die Anforderungsfilterung oder das Feature deinstalliert wird, können Sie ihn mit den folgenden Schritten erneut installieren.
Windows Server 2012 oder Windows Server 2012 R2
- Klicken Sie auf der Taskleiste auf Server-Manager.
- Klicken Sie im Server-Manager auf Verwalten und dann auf Rollen und Features hinzufügen.
- Klicken Sie im Assistenten zum Hinzufügen von Rollen und Features auf Weiter. Wählen Sie den Installationstyp aus, und klicken Sie auf Weiter. Wählen Sie den Zielserver aus, und klicken Sie auf Weiter.
- Erweitern Sie auf der Seite Serverrollen den Webserver (IIS), erweitern Sie den Webserver, erweitern Sie Sicherheit, und wählen Sie dann Anforderungsfilterung aus. Klicken Sie auf Weiter.
.
- Klicken Sie auf der Seite Features auswählen auf Weiter.
- Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
- Klicken Sie auf der Seite Ergebnisse auf Schließen.
Windows 8 oder Windows 8.1
- Bewegen Sie auf dem Startbildschirm den Mauszeiger ganz nach links unten, klicken Sie mit der rechten Maustaste auf die Starttaste und klicken Sie dann auf Systemsteuerung.
- Klicken Sie in der Systemsteuerungauf Programme und dann auf „Windows-Features aktivieren oder deaktivieren“.
- Erweitern Sie unter InternetinformationsdiensteWorld Wide Web Services, dann Sicherheit und wählen Sie dann Anforderungsfilterung aus.
- Klicken Sie auf OK.
- Klicken Sie auf Schließen.
Windows Server 2008 oder Windows Server 2008 R2
- Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungstools, und klicken Sie dann auf Server-Manager.
- Erweitern Sie im Hierarchiebereich des Server-Managers die Rollenund klicken Sie dann auf den Webserver (IIS) .
- Scrollen Sie im Bereich Webserver (IIS) zum Abschnitt Rollendienste, und klicken Sie dann auf Rollendienste hinzufügen.
- Wählen Sie auf der Seite Rollendienste auswählen des Assistenten Rollendienste hinzufügenAnforderungsfilterung aus, und klicken Sie dann auf Weiter.
- Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.
- Klicken Sie auf der Seite Ergebnisse auf Schließen.
Windows Vista oder Windows 7
- Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.
- Klicken Sie in der Systemsteuerungauf Programme und Funktionenund dann auf Windows-Features aktivieren oder deaktivieren.
- Erweitern Sie Internetinformationsdienste, dann World Wide Web Servicesund dann Sicherheit.
- Wählen Sie Anforderungsfilterungaus, und klicken Sie dann auf OK.
Gewusst wie
Hinweis für IIS 7.0-Nutzer: Einige der Schritte in diesem Abschnitt erfordern möglicherweise, dass Sie das Microsoft Administration Pack für IIS 7.0 installieren, das eine Benutzeroberfläche für die Anforderungsfilterung enthält. Informationen zum Installieren des Microsoft Administration Pack für IIS 7.0 finden Sie unter der folgenden URL:
So verweigern Sie eine URL-Sequenz
Öffnen Sie den Internet Information Services (IIS) Manager:
Wenn Sie Windows Server 2012 oder Windows Server 2012 R2 verwenden:
- Klicken Sie der der Taskleiste auf Server-Managerdann auf Toolsund dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows 8 oder Windows 8.1 verwenden:
- Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
- Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows Server 2008 oder Windows Server 2008 R2 verwenden:
- Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungund dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows Vista oder Windows 7 verwenden:
- Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.
- Doppelklicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
Wechseln Sie im Bereich Verbindungen zu der Verbindung, zum Standort, zur Anwendung oder zum Verzeichnis, für die Sie die Einstellungen für die Anforderungsfilterung ändern möchten.
Doppelklicken Sie im Bereich Startseite auf Anforderungsfilterung.
Klicken Sie im Bereich Anforderungsfilterung auf die Registerkarte URL-Sequenz verweigern, und klicken Sie dann im Bereich Aktionen auf URL-Sequenz hinzufügen....
Geben Sie im Dialogfeld Verweigerungssequenz hinzufügen die URL-Sequenz ein, die Sie blockieren möchten, und klicken Sie dann auf OK.
Um beispielsweise das Transversal des Verzeichnisses auf Ihrem Server zu verhindern, geben Sie im Dialogfeld zwei Punkte („..“) ein.
Konfiguration
Das <denyUrlSequences>
-Element des <requestFiltering>
-Elements wird auf Standort-, Anwendungs- oder Verzeichnisebene konfiguriert.
Attribute
Keine
Untergeordnete Elemente
Element | Beschreibung |
---|---|
add |
Optionales Element. Fügt der Auflistung der verweigerten URL-Sequenzen eine Sequenz hinzu. |
clear |
Optionales Element. Entfernt alle Verweise auf Sequenzen aus der <denyUrlSequences> -Auflistung. |
remove |
Optionales Element. Entfernt einen Verweis auf eine Sequenz aus der <denyUrlSequences> -Auflistung. |
Konfigurationsbeispiel
Die folgende Beispieldatei „Web.config“ verweigert den Zugriff auf drei URL-Sequenzen. Die erste Sequenz verhindert das Transversal des Verzeichnisses, die zweite Sequenz verhindert den Zugriff auf alternative Streams, und die dritte Sequenz verhindert, dass umgekehrte Schrägstriche in URLs verwendet werden.
<configuration>
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence=".." />
<add sequence=":" />
<add sequence="\" />
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Im folgenden Beispiel wird eine Kombination aus einem <denyUrlSequences>
Element und einem <alwaysAllowedUrls>
Element veranschaulicht, das alle URLs verweigert, wenn sie eine von zwei bestimmten Zeichensequenzen enthalten, jedoch immer eine bestimmte URL zulassen, die beide spezifischen Zeichensequenzen in einer bestimmten Reihenfolge enthält.
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence="bad" />
<add sequence="sequence" />
</denyUrlSequences>
<alwaysAllowedUrls>
<add url="/bad_sequence.txt" />
</alwaysAllowedUrls>
</requestFiltering>
</security>
</system.webServer>
Beispielcode
Die folgenden Codebeispiele veranschaulichen, wie Der Zugriff auf drei URL-Sequenzen für die Standardwebsite verweigert wird: Verzeichnistransversale („..“), alternative Datenströme („:“) und umgekehrte Schrägstriche („“).
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()