2010-07-27 3 views
17

Jemand (wahrscheinlich ein Bot) schickte eine Anfrage mit der folgenden URL zu meiner ASP.NET 4.0 Web-Formularanwendung (auf IIS 7.0):Warum wird eine URL, die einen Doppelpunkt enthält, als "potentiell gefährliche Anfrage" betrachtet?

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

Dies entspricht ein System.Web.HttpException verursacht. Ich habe eine Protokollierungs-E-Mail von ASP.NET HealthMonitoring erhalten, die ich konfiguriert hatte, und teilte mir mit:

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

Stapel Spur 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?

Vielen Dank für die Erklärung im Voraus!

bearbeiten

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

+0

Siehe diese Frage - http://stackoverflow.com/questions/2053132/is-a-colon-safe-for-friendly-url-use - Ich glaube nicht, dass es ein Duplikat als solches ist, sondern diskutiert Doppelpunkte in URLs – ChrisF

+0

Diese Seite auf [URL Encoding] (http://www.blooberry.com/indexdot/html/topics/urlencoding.htm) listet den Doppelpunkt in der Tabelle der reservierten Zeichen auf, erklärt aber nicht, wofür sie verwendet wird. – ChrisF

+0

Danke für den Link! Aber diese Frage scheint mehr zu diskutieren, wenn ein Doppelpunkt in Bezug auf die URL-Codierung "sicher" ist. Die ASP.NET-Ausnahme, die ich hatte, klingt eher nach einer Sicherheitsbedrohung. – Slauma

Antwort

19

Auf NTFS, eine bestimmte Dateipfad mehrere zugehörigen Datenströme aufweisen können. Neben dem Hauptstream, der auch als $DATA bekannt ist, können andere verwendet werden, die normalerweise zum Speichern von Metadaten wie der Internet-Zonenmarkierung in heruntergeladenen Dateien verwendet werden.

Alternate Data Streams wird mit einem Doppelpunkt-Trenner, 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 Anfrage Validierung wird generiert. 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, %5C und Bytefolgen, die zu lange UTF-8-Sequenzen ungültig sein würden, die zu demselben aufgelöst werden) und das Nullbyte. Es ist am besten, konservativ zu sein bezüglich dem, was man generell in Pfade steckt.

+2

Dies war eine tatsächliche vuln auf NT4, z.B. http://www.securityfocus.com/bid/149/discuss – devio

+0

Danke, tolle Erklärung! Diese Sicherheitsüberprüfung und das Risiko mit dem Doppelpunkt ist eine MS-Windows-spezifische Sache. Ein Hinweis zu Ihrer Empfehlung, die ASP.NET-Anforderungsvalidierung abzuschalten: Ich habe es Seite für Seite erledigt (für viele Seiten in der App) und die entsprechenden Prüfungen und Kodierungen manuell durchgeführt. Aber um ehrlich zu sein: Ihre Antwort hat mich überzeugt, sie NICHT global abzuschalten, da das von Ihnen beschriebene Sicherheitsrisiko ziemlich komplex für mich ist und ich noch nie davon gehört habe. Welche anderen Gefahren könnte die integrierte Anfragevalidierung auch prüfen? Wenn ich es abstelle, müsste ich all diese Risiken kennen und meine eigenen Maßnahmen ergreifen. – Slauma

+3

Wenn Sie den Wert 'bla1.bla2.bla3.bla4.bla5:)' nur als Routing-Parameter und niemals als tatsächlichen Dateinamen verwenden, gibt es keine Sicherheitslücke. (Die Bereinigung von Benutzereingaben zur Verwendung als Dateiname unter Windows ist in der Tat eine schwierige Aufgabe, viel mehr als nur dieses Problem. Vermeiden Sie die Verwendung von benutzerdefiniertem Inhalt für Dateinamen im Allgemeinen.) Vertrauen Sie der Anforderungsüberprüfung für nichts und kann Sie nicht vor Schwachstellen im allgemeinen Fall schützen, und * wird * perfekt gültige Eingaben blockieren. – bobince

0

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

Warum ist ein Doppelpunkt in einer URL ein "Injektionsangriff"? Ich kenne die Anforderungsvalidierungsfunktion, aber bisher nur im Zusammenhang mit dem Einreichen von Formularwerten, die