| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/Security/Defenses/Input_validation | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Die Eingabevalidierung ist die Praxis, zu berprfen, ob jede Eingabe, die Ihre Website akzeptiert, den Erwartungen entspricht.
Damit eine Website nahezu jede Art von Interaktivitt oder Anpassung bereitstellen kann, muss sie einige Eingaben akzeptieren, typischerweise von Benutzern ber einen Webbrowser und manchmal auch von anderen Anwendungen.
Benutzer geben typischerweise Informationen in <input>-Elemente innerhalb eines <form>-Elements im Frontend der Website ein, und die Daten werden typischerweise als Body einer POST-Anfrage oder als URL-Parameter, die einer GET-Anfrage angehngt sind, an den Server gesendet. Die Eingabe knnte jedoch auch ber andere Mittel auf dem Server ankommen, wie z. B. ber Cookie-Werte oder zustzliche HTTP-Header.
Wenn die vom Benutzer bereitgestellte Eingabe nicht die Form oder den Inhalt hat, den die Website erwartet zum Beispiel, wenn sie eine ungltige E-Mail-Adresse eingeben , kann dies dazu fhren, dass die Website nicht ordnungsgem funktioniert. Ein solches Problem so frh wie mglich zu erkennen, verbessert die Benutzererfahrung.
Abgesehen von unabsichtlichen Fehlern des Benutzers ermglicht die Bereitstellung unerwarteter Eingaben einem bswilligen Akteur, verschiedene Sicherheitsangriffe zu versuchen, einschlielich Cross-Site Scripting (XSS), SQL-Injektion und Befehlsinjektion. In diesen Situationen erstellt der Angreifer absichtlich einige Eingaben, die einen Angriff ermglichen, und bergibt diese an die Anwendung. Der Angreifer knnte die Frontend der Website vollstndig umgehen und die bswillige Eingabe direkt in einer HTTP-Anfrage bereitstellen. Obwohl Eingabevalidierung normalerweise keine vollstndige Lsung fr diese Sicherheitsbedrohungen ist, ist sie eine wichtige erste Verteidigungslinie.
Anwendungen knnen eine bestimmte Prfung oft implementieren, indem sie sie in Bezug auf die erlaubten Werte (eine "Allowlist") oder in Bezug auf die abgelehnten Werte (eine "Denylist") spezifizieren.
Zum Beispiel, nehmen wir an, wir mchten berprfen, dass eine numerische Eingabe zwischen null und 10 liegt. Wir knnen dies als Allowlist implementieren, indem wir testen, ob die Eingabe diesem Bereich entspricht, und alles andere ablehnen:
function checkRange(input) {
if (input >= 0 && input <= 10) {
return true;
}
return false;
}
Alternativ knnen wir es als Denylist implementieren, indem wir testen, ob die Eingabe auerhalb des Bereichs liegt, und alles andere erlauben:
function checkRange(input) {
if (input < 0 || input > 10) {
return false;
}
return true;
}
Es ist in der Regel zuverlssiger, eine Prfung als Allowlist zu implementieren, da dies standardmig Werte ablehnt, die der Autor nicht bercksichtigt hat. Dies ist besonders dann der Fall, wenn die ungltige Eingabe absichtlich von einem Angreifer erstellt wird: es ist fr einen Angreifer einfacher, eine Eingabe zu liefern, die die Prfung umgeht und standardmig zur "Erlauben"-Bedingung fhrt.
Wir knnen zwischen zwei Arten der Eingabevalidierung unterscheiden:
Anwendungen implementieren typischerweise syntaktische Validierung durch die Typprfungsfunktionen ihrer gewhlten Programmiersprache.
Um semantische Validierung zu implementieren, knnen sie verschiedene Methoden verwenden, einschlielich Bereichsprfungen, das berprfen eines Werts gegen einen Satz zulssiger Werte oder fr komplexere Flle regulre Ausdrcke.
Beachten Sie, dass regulre Ausdrcke schwer richtig hinzubekommen sein knnen, und einige Ausdrcke knnen eine Anwendung anfllig fr Denial-of-Service-Angriffe machen. Aus diesem Grund ist es in der Regel besser, gut bewertete Drittanbieter-Bibliotheken zur Validierung zu verwenden. Eine beliebte Wahl ist validator.js.
Anwendungen sollten die Eingabe so bald wie mglich nach der Eingabe validieren, damit der Benutzer sofortiges Feedback zum Problem erhlt und die Mglichkeit hat, es zu beheben. Dies bedeutet in der Regel, dass Sie die Eingabe auf der Client-Seite, im Frontend-Code der Website, validieren sollten.
Sie sollten jedoch nicht darauf vertrauen, dass die Validierung auf der Client-Seite Sicherheitsprobleme erkennt, da ein Angreifer den Frontend-Code mglicherweise umgehen oder komplett umgehen kann. Sie mssen die Eingabe also auch auf dem Server validieren, bevor Sie sie verarbeiten.
Das HTML-<input>-Element untersttzt eine Reihe von Attributen, die es Ihnen ermglichen, gltige Werte fr die Eingabe, die der Benutzer bereitstellt, zu definieren. Dazu gehren:
type, das den erwarteten Eingabetyp definiert und die Validierung basierend auf dem Typ auslst. Zum Beispiel, wenn type auf email gesetzt ist, berprft der Browser automatisch, dass die Eingabe eine syntaktisch gltige E-Mail-Adresse ist.
minLength und maxLength, die die minimale und maximale Lnge definieren, die eine Texteingabe haben darf.
min und max, die die minimalen und maximalen Werte definieren, die ein numerischer Wert haben darf.
step, das die Granularitt definiert, die ein numerischer Eingabewert haben muss.
pattern, das einen regulren Ausdruck definiert, dem die Texteingabe entsprechen muss.
Sie knnen auch eine benutzerdefinierte Validittsprfung in JavaScript definieren, indem Sie einen Ereignishandler fr das change-Ereignis des Elements hinzufgen. Innerhalb des Ereignishandlers knnen Sie eine benutzerdefinierte Validittsprfung durchfhren und dann die Methode setCustomValidity() des Elements aufrufen, um deren Gltigkeit festzulegen.
Wenn die Eingabe die Validierung nicht besteht, wird der Browser das Formular nicht bermitteln und stattdessen eine Fehlermeldung an den Benutzer anzeigen.
Weitere Informationen finden Sie unter Using HTML form validation.
Auf der Server-Seite sollten Anwendungen, wenn mglich, die von ihrem gewhlten Framework bereitgestellten Validierungsfunktionen verwenden, zum Beispiel die Validators von Django.
Es ist besonders wichtig, auf Validierungsfehler zu achten, die nicht von einem Benutzer gemacht worden sein knnen, der mit der Frontend der Website interagiert: zum Beispiel ein <select>-Element, das eine Option enthlt, die nicht im HTML des Formulars enthalten war. Solche Fehler sind starke Indikatoren dafr, dass ein Angreifer vorstzlich ungltige Eingaben erstellt.
Wenn Eingaben als JSON dargestellt werden, knnen Sie JSON Schema verwenden, um die Gltigkeit zu definieren: dies schliet APIs ein, die mit OpenAPI spezifiziert sind. Wenn Sie eine Datenbank verwenden, knnen Sie auch ein Datenbankschema definieren und Eingaben dagegen validieren.
Wenn Ihre Website Dateiuploads erlaubt, mssen Sie sich mit verschiedenen zustzlichen Bedrohungen auseinandersetzen. Angreifer knnten:
Die folgenden bewhrten Methoden werden hufig verwendet, um diese Bedrohungen zu mindern:
Erlauben Sie nur authentifizierten Benutzern, Dateien hochzuladen.
Dateinamen sind ebenfalls Benutzereingaben und mssen validiert werden. Generieren Sie, wenn mglich, Ihren eigenen Namen fr die gespeicherten Dateien. Wenn Sie die von den Benutzern bereitgestellten Namen verwenden mssen, seien Sie sehr restriktiv in den Zeichen, die die Benutzer verwenden drfen, und validieren Sie die Namen entsprechend.
Bestimmen Sie, welche Dateitypen Sie untersttzen mssen, und erlauben Sie nur diese Typen basierend auf der Dateierweiterung. Seien Sie besonders vorsichtig bei webausfhrbaren Dateitypen wie HTML oder JavaScript. Da die berprfung von Dateierweiterungen die Verarbeitung der vom Benutzer bereitgestellten Dateinamen erfordert, stellen Sie sicher, dass Sie Zuerst Dateinamen validieren.
Beschrnken Sie die Gre von Dateien, die hochgeladen werden knnen.
Ermglichen Sie Benutzern, unerwnschte oder illegale Inhalte zu melden, und haben Sie einen Prozess, um sie zu entfernen.
Wenn mglich, speichern Sie Dateien auf einem anderen Host. Wenn dies nicht mglich ist, speichern Sie die Dateien auerhalb des Stammverzeichnisses der Website. Dies verringert das Risiko, dass bswillige Uploads in Angriffen wie XSS an andere Benutzer geliefert werden.
Weitere Details finden Sie im File Upload Cheat Sheet von OWASP.
Eine Website dazu zu bringen, bsartige Eingaben zu akzeptieren, ist ein Angriffspfad fr eine Reihe von Angriffen, bei denen die Seite den Inhalt unbeabsichtigt als Code oder Befehl ausfhrt. Dazu gehren:
Cross-Site-Scripting (XSS)-Angriffe, bei denen der Browser bsartigen Code ausfhrt, als wre er Teil der Website.
SQL-Injection-Angriffe, bei denen der Server bsartige SQL-Abfragen auf seiner Datenbank ausfhrt.
Befehlsinjektionsangriffe, bei denen die Seite bsartige Befehle im Betriebssystem des Hosts ausfhrt.
Generische Eingabevalidierung, wie wir sie hier besprochen haben, ist eine ntzliche erste Verteidigungslinie gegen solche Angriffe, aber sie ist keine vollstndige Verteidigung gegen sie oder auch nur die primre Verteidigung. Dies liegt daran, dass es extrem schwer ist, sich gegen diese Angriffe zu schtzen, ohne den spezifischen Kontext zu kennen, in dem die Eingaben verwendet werden.
Stattdessen sollten Anwendungen spezifische Abwehrmechanismen gegen diese Angriffe verwenden:
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |