Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eingabevalidierung: Eingaben prüfen

Nach dieser Lektion: Ich kann eine Eingabe mit einer Liste erlaubter Werte, einer Länge und einem Typ prüfen, bevor das Programm ihr traut.

Lektion, 55 Min.2 BefehleSQL-Injection-Lab: eine schwache Shop-Suche angreifen, die Abfrage reparieren und die Reparatur belegen

Was ist Eingabevalidierung?

Eingabevalidierung heißt, jede Eingabe zu prüfen, bevor das Programm ihr traut. Das ist wichtig, weil ein Programm mit ungeprüften Eingaben tut, was ein Fremder ihm vorgibt.

Ein Bestellformular erwartet eine Menge von 1 bis 20. Jemand tippt 99999, ein Wort oder gar nichts. Ohne Prüfung bucht das Programm vielleicht den Lagerbestand ins Minus.

Am Ende dieser Lektion

Notiz

Ich kann eine Eingabe mit einer Liste erlaubter Werte, einer Länge und einem Typ prüfen, bevor das Programm ihr traut.

Schlüsselwörter

BegriffWas er bedeutet
Validierungdie Prüfung, ob eine Eingabe die Regeln erfüllt
Erlaubnislisteeine Liste der Werte, die gelten; alles andere wird abgelehnt; auf Englisch Allow List
Typdie Art eines Werts, etwa Text oder ganze Zahl
Längedie Anzahl der Zeichen einer Eingabe
Sperrlisteeine Liste verbotener Werte; sie vergisst immer etwas; auf Englisch Deny List

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Erlaubnisliste ist besser als eine Sperrliste

Es gibt zwei Wege. Eine Sperrliste nennt, was verboten ist. Eine Erlaubnisliste nennt, was gilt, und lehnt den Rest ab.

Die Sperrliste vergisst immer einen Fall. Die Erlaubnisliste ist kurz und vollständig, wenn die Menge der guten Werte klein ist, etwa fünf Artikel oder eine Sortierung.

Ein Artikel muss auf der Liste stehen

Code: python
ARTIKEL = ["Notizbuch", "Stift", "Tasse", "Schürze", "Lampe"]

def artikel_ok(name):
    return name in ARTIKEL

# Ändern Sie den Namen in "Stift", dann in "Stift; weg".
name = "Tasse"
print(name, "->", artikel_ok(name))

Typ und Länge begrenzen, was ankommt

Nicht jeder Wert passt auf eine Liste. Eine Menge ist eine Zahl, ein Gutscheincode ein Text fester Länge. Hier prüfen Sie den Typ und die Länge.

Die Prüfung läuft in einer festen Reihenfolge: erst die Länge, dann der Typ, dann der Bereich. Ein Text, der nicht nur aus Ziffern besteht, darf nie in eine Zahl umgewandelt werden.

Beispiel: Regeln für ein Bestellformular

FeldRegelGutAbgelehnt
Artikelsteht auf der ListeStiftStiftx
Mengenur Ziffern, 1 bis 20120, 99, zwölf
Gutschein8 Zeichen, nur A bis Z und 0 bis 9SOMMER24sommer, SOMMER-24

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Menge prüfen, bevor umgewandelt wird

Code: python
def menge_ok(text):
    if len(text) == 0 or len(text) > 2:
        return False
    if not text.isdigit():
        return False
    zahl = int(text)
    return zahl >= 1 and zahl <= 20

# Probieren Sie "12", "0", "99" und "zwölf".
eingabe = "12"
print(eingabe, "->", menge_ok(eingabe))

Was der Shop des Labs nicht prüft

Der Shop des Labs hat keine Prüfung für sein Suchwort. Die zwei Runs sehen nur hin. Der erste sucht ein echtes Wort. Der zweite schickt ein leeres Suchwort und zählt die Zeilen der Antwort.

Ein leeres Wort liefert alle fünf öffentlichen Artikel: Der Shop fragt nicht, ob ein Wort sinnvoll ist.

Eine gewöhnliche Suche

Befehl
curl -s -G --data-urlencode "q=notebook" http://app:8000/search

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein leeres Suchwort

Befehl
curl -s -G --data-urlencode "q=" http://app:8000/search | wc -l

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, die Prüfung im Browser genüge, etwa ein Feld, das nur Ziffern annimmt. Das stimmt nicht. Wer die Seite umgeht, sendet jeden Wert selbst. Prüfen Sie immer noch einmal im Programm, das die Daten verarbeitet. Die Prüfung im Browser ist nur Bequemlichkeit.

Über dieses Lab und seinen Quellcode: SQL-Injection-Lab: eine schwache Shop-Suche angreifen, die Abfrage reparieren und die Reparatur belegen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.