Frage Warum wird eine URL, die einen Doppelpunkt enthält, als "potentiell gefährliche Anfrage" betrachtet?


Jemand (wahrscheinlich ein Bot) hat eine Anfrage mit der folgenden URL an meine ASP.NET 4.0-Webformularanwendung (unter IIS 7.0) gesendet:

http://ipaddress-of-my-applications-domain/bla1.bla2.bla3.bla4.bla5:)

Dies verursachte ein System.Web.HttpException. Ich habe eine Protokollierungs-E-Mail von ASP.NET HealthMonitoring erhalten, die ich konfiguriert habe.

Ein potenziell gefährlicher Request.Path-Wert wurde vom Client erkannt (:).

Stapelverfolgung war:

System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Warum ist ein Doppelpunkt in der URL "potenziell gefährlich"? Welche gefährlichen Dinge können mit solch einer URL gemacht werden? Habe ich hier ein Sicherheitsloch, das mir nicht bekannt ist?

Danke für die Erklärung im Voraus!

Bearbeiten

Ich habe getestet, dass ein Doppelpunkt in einer Abfragezeichenfolge (wie http://mydomain.com?Test=9:)) verursacht diese Ausnahme nicht.


18
2017-07-27 09:57


Ursprung


Antworten:


Auf NTFS kann ein bestimmter Dateipfad mehrere zugeordnete Datenströme haben. Neben dem Hauptstrom, auch bekannt als $DATAEs kann andere geben, die normalerweise zum Speichern von Metadaten wie der Internet-Zonenmarkierung in heruntergeladenen Dateien verwendet werden.

Alternative Datenströme Der Zugriff erfolgt über ein Doppelpunkt-Trennzeichen, z. file.dat:$DATA ist eine alternative Art zu sagen file.dat. Das Vorhandensein von ADSs über das Internet hat Microsoft in der Vergangenheit zu einigen Sicherheitsproblemen geführt (z. B. den Quellcode von ASP - Seiten zurückgeben, statt sie auszuführen), um vorsichtshalber die Verwendung von Doppelpunkten im Pfadbereich der URL, da der Pfadteil oft dem Dateisystem zugeordnet ist (wenn auch nicht in Ihrem Fall). Dies tritt weniger häufig in der Abfragezeichenfolge auf und wird daher nicht blockiert.

Dies ist bei weitem nicht die schlechteste falsch positive Anforderungsvalidierung. Seine Anti-Injektionseigenschaften sind viel schlimmer. Ich persönlich würde es immer deaktivieren, da es ein dummes, kaputtes Feature ist, das deine Webapp nicht wirklich sicher machen kann; nur die richtige Aufmerksamkeit für das string-entweichen (und die starke Sanitisierung von allem, was du als Dateiname verwenden willst) kann das tun.

Es gibt andere Zeichen, die Sie selbst dann nicht einfügen können, wenn Sie die Anforderungsüberprüfung deaktivieren. Insbesondere Schrägstriche (%2F, %5Cund Byte-Sequenzen, die überlange UTF-8-Sequenzen ungültig sein würden, die zu demselben aufgelöst werden) und das Null-Byte. Es ist am besten, konservativ zu sein bezüglich dem, was man generell in Pfade steckt.


20
2017-07-27 10:43



Ich erinnere mich nicht genau, aber Internet Explorer ist an das Betriebssystem gebunden und es konnte einige schlechte Dinge wie "con: sss" konnte Konsole zu öffnen und einige Batch-Befehle etc. ausführen, bevor Doppelpunkt als Protokoll und Windows berücksichtigt wird Sie überschreiben / erstellen neue Protokolle, die von Ihrer DLL geöffnet und konsumiert werden können. Jeder mit mehr Erfahrung von com und URL-Moniker kann Ihnen sehr korrekte Antwort geben.


1
2017-07-27 10:45



Dies liegt an der Anforderungsüberprüfungsfunktion von ASP.NET, die verhindert, dass Clients Ihre Website angreifen. Die Funktion ist standardmäßig aktiviert.

Der folgende Link erklärt besser: http://www.asp.net/learn/whitepapers/request-validation


0
2017-07-27 10:07