Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen

Aktualisiert: November 2007

Bei den meisten Skriptangriffen gelingt es Benutzern, ausführbaren Code (oder Skripts) in einer Anwendung zu platzieren. Anforderungen werden von ASP.NET standardmäßig überprüft. Wenn Formulare mit HTML empfangen werden, wird eine Warnung ausgegeben.

Gegen Skriptangriffe können Sie sich folgendermaßen schützen:

  • Führen Sie eine Parametervalidierung für Formularvariablen, Abfragezeichenfolgen-Variablen und Cookiewerte aus. Es sollten zwei Typen von Überprüfungen durchgeführt werden: die Überprüfung, dass die Variablen in den erwarteten Typ konvertiert werden können (z. B. in eine ganze Zahl, in ein Datum-/Zeitformat usw.), und die Überprüfung erwarteter Bereiche oder Formatierungen. Beispiel: Eine Formularsendevariable, die eine ganze Zahl sein soll, kann mit der Int32.TryParse-Methode darauf überprüft werden, ob dies zutrifft. Darüber hinaus sollte die resultierende ganze Zahl darauf überprüft werden, dass der Wert innerhalb eines bestimmten Wertbereichs liegt.

  • Übernehmen Sie beim Zurückschreiben von Werten in die Antwort HTML-Codierung für die Zeichenfolgenausgabe. Dadurch wird sichergestellt, dass benutzerdefinierte Zeichenfolgeneingaben in Browsern statt als ausführbarer Skriptcode oder interpretierte HTML-Elemente als statischer Text wiedergegeben werden.

Bei der HTML-Verschlüsselung werden HTML-Elemente mithilfe von für HTML reservierten Zeichen konvertiert, sodass sie angezeigt, aber nicht ausgeführt werden können.

So wenden Sie HTML-Codierung auf eine Zeichenfolge an

  • Rufen Sie vor dem Anzeigen von Zeichenfolgen die HtmlEncode-Methode auf. HTML-Elemente werden in Zeichenfolgendarstellungen umgewandelt, die der Browser zwar anzeigt, jedoch nicht als HTML-Code erkennt.

    Das folgende Beispiel veranschaulicht die HTML-Verschlüsselung: Im ersten Fall wird die Eingabe des Benutzers verschlüsselt, bevor sie angezeigt wird. Im zweiten Fall werden aus einer Datenbank stammende Daten verschlüsselt, bevor sie angezeigt werden.

    Hinweis:

    Dieses Beispiel können Sie nur nachvollziehen, wenn Sie die Anforderungsüberprüfung für die Seite deaktivieren, indem Sie das @ Page-Attribut ValidateRequest="false" hinzufügen. In einer Produktionsumgebung sollten Sie die Anfrageüberprüfung nicht deaktivieren. Stellen Sie also sicher, dass Sie nach dem Anzeigen dieses Beispiels die Anfrageüberprüfung wieder aktivieren.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles Button1.Click
            Label1.Text = Server.HtmlEncode(TextBox1.Text)
            Label2.Text = _
                Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
    End Sub
    
    private void Button1_Click(object sender, System.EventArgs e)
    {
        Label1.Text = Server.HtmlEncode(TextBox1.Text);
        Label2.Text = 
            Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
    }
    

Siehe auch

Konzepte

Übersicht über Skriptangriffe

Übersicht über Sicherheitsrisiken bei Webanwendungen

Grundlegende Sicherheitshinweise für Webanwendungen