Übersicht über Skriptangriffe

Aktualisiert: November 2007

Aus der Perspektive von Webbrowsern handelt es sich bei Webseiten lediglich um umfangreiche Zeichenfolgen. Der Browser verarbeitet diese Zeichenfolge sequenziell, wobei bestimmte Zeichen angezeigt und andere nach speziellen Regeln verarbeitet werden, z. B. <b> und <script>. Wenn böswillige Benutzer derartige Sonderzeichen in eine Seite einfügen, kann der Browser sie nicht als nachträglich hinzugefügte Zeichen erkennen. Die Zeichen werden daher wie ein normaler Bestandteil der Seite verarbeitet.

Ein einfacher Skriptangriff arbeitet beispielsweise wie folgt. Wenn eine Anwendung Benutzern ermöglicht, Kommentare zu den neuesten Kinofilmen für andere Benutzer zu veröffentlichen, laufen die Angriffsschritte möglicherweise folgendermaßen ab:

  1. Die Anwendung zeigt ein Formular an, in das Benutzer Kommentare eingeben können. Ein böswilliger Benutzer verfasst einen Kommentar, der einen <script>-Block enthält.

  2. Das Formular wird übertragen, und der Kommentar des böswilligen Benutzers wird in einer Datenbank gespeichert.

  3. Ein anderer Benutzer greift nun auf die Site zu. Beim Aufbau der Seite werden die Kommentare aus der Datenbank ausgelesen und an die Seite übergeben. Der vom böswilligen Benutzer hinzugefügte <script>-Block wird wie ein regulärer Textkommentar in die Seite geschrieben.

  4. Wenn der zweite Benutzer die Seite aufruft, wechselt diese zum <script>-Block und führt ihn aus.

Böswillige Benutzer können Skripts auch auf andere Weise einsetzen. Die meisten Skriptangriffe erfordern in der Regel, dass die Anwendung die bösartige Eingabe akzeptiert und an eine Seite weitergibt (oder ein Echo ausführt), auf der sie vom Browser ausgeführt wird. Das Ausmaß der Schäden durch derartige Angriffe hängt von den ausgeführten Skripts ab. Möglicherweise wird im Browser nur eine unsinnige Meldung angezeigt. In schwereren Fällen können allerdings auch Cookies und Benutzereingaben (z. B. Kennwörter) entwendet werden. Bei unzureichender Internetsicherheit kann auch systemeigener Code auf dem Computer des Benutzers ausgeführt werden.

Informationen zum Verhindern von Skriptangriffen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.

Hinweis:

ASP.NET hilft bei der Absicherung gegen Skriptangriffe, die als URLs getarnt sind, indem die URLs auf potenziell gefährliche Zeichenfolgen geprüft werden, z. B. "<!", "</" oder "<?".

SQL-Anweisungsangriffe

Eine Variante von Skriptangriffen bewirkt die Ausführung von böswilligen SQL-Anweisungen. Dazu kann es kommen, wenn eine Anwendung Benutzer zur Eingabe von Informationen auffordert und diese anschließend zu einer Zeichenfolge verkettet, die die SQL-Anweisung darstellt. Eine Anwendung fordert beispielsweise zur Eingabe eines Kundennamens auf, um folgende Anweisung auszuführen:

"Select * From Customers where CustomerName = " & txtCustomerName.Value

Böswillige Benutzer, die über Informationen zu dieser Datenbank verfügen, können beispielsweise das Textfeld verwenden, um die folgende eingebettete SQL-Anweisung mit dem Namen des Kunden einzugeben:

Select * From Customers Where CustomerName = 'a' Delete From Customers Where CustomerName > ''

Beim Ausführen der Abfrage wird die Datenbank beschädigt.

Schutz gegen Skriptangriffe

Der beste Schutz gegen Skriptangriffe besteht darin, Eingaben von Benutzern grundsätzlich nicht zu vertrauen. Bedenken Sie stets, dass von Browsern an die Anwendung gesendete Daten böswillige Skripts enthalten können.

Beim Schreiben von Zeichenfolgen in Seiten sollten Sie sich ebenfalls bewusst sein, dass darin bösartige Skripts enthalten sein können (es sei denn, Sie haben die Zeichenfolge selbst programmgesteuert erstellt). Wenn Sie beispielsweise Zeichenfolgen aus einer Datenbank auslesen, sollten Sie bedenken, dass diese böswillige Skripts enthalten könnten. Sicherheitsbewusste Entwickler misstrauen sogar ihrer eigenen Datenbank, da sie davon ausgehen, dass böswillige Benutzer die Identität der Datenbank zu Täuschungszwecken verwenden.

ASP.NET bietet verschiedene Möglichkeiten, sich gegen Skriptangriffe zu schützen:

  • ASP.NET führt Anforderungsvalidierung für Abfragezeichenfolgen und Formularvariablen sowie Cookiewerte aus. Standardmäßig gibt das ASP.NET-Seitenframework einen Fehler aus, wenn die aktuelle Request HTML-verschlüsselte Elemente oder HTML-Zeichen (z. B. &#151; für einen englischen Gedankenstrich) enthält.

  • Wenn Sie Zeichenfolgen in der Anwendung anzeigen möchten, ihnen aber nicht vertrauen, wenden Sie HTML-Codierung an, wenn die Zeichenfolgen in einer Antwort zurückgeschrieben werden. Beispiel: Das Tag <b> wird verschlüsselt zu &lt;b&gt;. Diese Option empfiehlt sich für die Anzeige von Zeichenfolgen, die aus Datenbanken stammen, deren Inhalt Sie nicht sicher vertrauen können.

  • Wenn Sie möchten, dass die Anwendung bestimmten HTML-Code akzepiert (z. B. einige Formatierungsanweisungen von Benutzern), sollten Sie HTML auf dem Client codieren, bevor es an den Server übergeben wird. Weitere Informationen hierzu finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.

  • Um sich gegen Angriffe über SQL-Anweisungen zu schützen, sollten Sie grundsätzlich keine SQL-Abfragen mit Zeichenfolgenverkettung erstellen. Verwenden Sie stattdessen eine parametrisierte Abfrage, und weisen Sie der Benutzereingabe Parameterobjekte zu. Ausführliche Informationen finden Sie unter Parameter in Datenadapterbefehlen.

  • Überprüfen Sie Formulareingaben immer auf eine Reihe erwarteter Werte, und führen Sie immer eine Validierung der Zeichenfolgenformatierung und des Typs aus. Wenn z. B. erwartet wird, dass eine bestimmte Formularvariable eine ganze Zahl ist, überprüfen Sie mithilfe der Int32.TryParse-Methode, ob der Wert wirklich eine ganze Zahl ist, und stellen Sie außerdem mithilfe der Bereichsprüfung sicher, dass sich der Wert in einem gültigen Bereich befindet.

Siehe auch

Aufgaben

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

Konzepte

Übersicht über Sicherheitsrisiken bei Webanwendungen

Grundlegende Sicherheitshinweise für Webanwendungen