2009-09-15 9 views
5

Wir möchten Benutzer HTML oder Javascript in einem Textfeld eingeben eingeben.Suchen Sie nach Skript in asp.net Textfeld

Wir können einfach die Eingabe analysieren und auf Winkelklammern prüfen. Ich frage mich, gibt es einen besseren Weg, dies zu tun?

+0

Gute Frage - es zeigt, dass Sie an Sicherheit denken. +1. – David

Antwort

5

Ich habe gefunden, dass das Ersetzen der Engelklammern mit codierten Engelklammern die meisten Probleme löst. Hier ist eine reference für alle Arten, wie Menschen Cross-Site-Skript können. Eine Regex zu machen, um jede Art von HTML und/oder Script zu stoppen, ist fast unmöglich.

+1

+1 Überprüfe nichts, entkomme stattdessen auf dem Weg nach draußen. Benutzer sollten in der Lage sein, einige spitze Klammern einzugeben, und sie sollten als normale spitze Klammern auf der Seite wie folgt angezeigt werden: < >. Die richtige Methode heißt HtmlEncode (wenn die .NET-Steuerelemente in Ihrer Vorlage nicht automatisch für Sie entweichen) und betrifft auch Und-Zeichen und Anführungszeichen (für Text in Attributwerten). – bobince

2

Können Sie die Eingabe mit einem Validator für reguläre Ausdrücke überprüfen?

3

Wenn Sie Page.ValidateRequest = true festlegen, wird dies gestoppt.

Ab .net Version 1.1 (denke ich) ist dies standardmäßig auf True festgelegt.

+1

ValidateRequest ist absolut, völlig falsch und verrät ein gefährliches Missverständnis des Problems. Es ähnelt dem viel verspotteten magic_quotes_gpc von PHP, da es versucht, ein Ausgabeproblem (escape) in der Eingabeebene zu beheben. Wie magische Zitate bricht es Ihre Anwendung (zB wenn es hier bei SO wäre, wären wir überhaupt nicht in der Lage, über HTML '' zu reden), während es seine Sicherheit nicht garantiert (Ausgabe kommt nicht alles direkt von Eingabe und Filtern kann getäuscht werden). – bobince

+0

Ich leugne nichts, was Sie sagen, und in fast allen unseren Anwendungen ist es global ausgeschaltet und jede Eingabe/Ausgabe wird manuell validiert. Diese Frage besagt jedoch: "Wir möchten Benutzer daran hindern, HTML oder JavaScript in ein Textfeld einzugeben." ValidateRequest führt dies aus. –

+0

In der Tat. Es ist die richtige Antwort ... es ist vielleicht nicht die richtige Frage! – bobince

1

Page.ValidateRequest wird dies stoppen, es sei denn, Sie haben es ausgeschaltet.

Die OWASP-Richtlinien (so gut wie alle kompetenten Sicherheitsrichtlinien) sagen jedoch, dass Sie NICHT versuchen sollten, schlechte Zeichen in Ihrer Validierung einzuschränken, sondern stattdessen so filtern sollten, dass nur speziell erlaubte Zeichen verwendet werden.

http://en.wikipedia.org/wiki/Secure_input_and_output_handling

http://www.owasp.org/index.php/Top_10_2007-A1

Für eine gute sichere Codierung Praktiken würde ich hier starten und ein Lesezeichen auf den Standort für die Zukunft. http://www.owasp.org/index.php/Top_10_2007

0

Ich stieß auf dieses HTML-Dienstprogramm. Der Code verwendet eine weiße Liste von Tags, die eingegeben werden dürfen. Das Skript formatiert dann den Eingabetext und entfernt Tags und Skripts, die für Cross-Site-Scripting-Angriffe verwendet werden können.

Für Ihre Zwecke könnten Sie keine Tags in der Whitelist haben.

Html utilty