Zum Inhalt springen

Anwendungsentwicklung und Softwarequalität – Eingaben und Datenbankzugriffe absichern

Aus MOOCsWiki Staging
Die Druckversion wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.
aiMOOC-Siegel aiMOOC

Anwendungsentwicklung und Softwarequalität – Eingaben und Datenbankzugriffe absichern

QR-Code



Einleitung

Anwendungsentwicklung und Softwarequalität – Eingaben und Datenbankzugriffe absichern

Zielgruppe: Ausbildung Fachinformatik – Anwendungsentwicklung

Lernzeit: 75–90 Minuten

Vorkenntnisse: Grundlagen in Python, SQL und Datenbanken

Lernziel: Du kannst Eingaben prüfen, Datenbankabfragen parametrisieren und Sicherheitsmaßnahmen mit automatisierten Tests nachweisen.

Ausbildungsfall: Du entwickelst eine kleine Materialverwaltung für eine fiktive IT-Werkstatt.

Sicherheitsregel: Alle praktischen Versuche finden ausschließlich lokal mit erfundenen Daten statt. Das Python-Labor nutzt eine SQLite-Datenbank im Arbeitsspeicher. Es benötigt weder Netzwerkzugriff noch Zugangsdaten. Untersuche keine fremden Systeme oder Produktivdatenbanken. Externe Videos und Lernseiten sind freiwillige Zusatzmedien und keine Bestandteile des lokalen Testlabors.


Dein Lernpfad

Lerneinheit Zeit Dein Ergebnis
Eingaben verstehen 10 Min. Vertrauensgrenzen erkennen
Eingaben validieren 10 Min. Gültige Werte bestimmen
SQL sicher ausführen 15 Min. Parameterbindung erklären
Datenbank absichern 10 Min. Schutzschichten kombinieren
Lokales Testlabor 20 Min. Tests ausführen und erweitern
Lernkontrolle und Transfer 15–25 Min. Sicherheitsentscheidungen begründen


Ausbildungsfall: Die digitale Materialverwaltung

Eine Ausbildungswerkstatt verwaltet Ersatzteile. Mitarbeitende können Bestände abfragen und Materialausgaben erfassen.

Fiktive Ausgangsdaten:

Artikel Anfangsbestand Beispielausgabe Bestand danach
Schraube 15 2 13
Kabel 8 0 8
Sensor 2 0 2

Die fachlichen Regeln:

  1. Mengenvalidierung: Eine Ausgabe muss eine ganze Zahl zwischen 1 und 20 sein.
  2. Artikelauswahl: Nur Schraube, Kabel und Sensor können ausgegeben werden.
  3. Bestandsschutz: Eine Ausgabe darf den Bestand nicht negativ machen.
  4. Abfragesicherheit: Eingaben dürfen die SQL-Struktur nicht verändern.

Dein Auftrag: Entwickle eine sichere lokale Testversion und weise ihre Eigenschaften nach.


Lerneinheit 1: Vertrauensgrenzen erkennen

Eine Anwendung darf Benutzereingaben nicht automatisch vertrauen. Bei einer Webanwendung muss die serverseitige Komponente Eingaben unabhängig vom Browser prüfen.

Sicherer Ablauf:

Schritt Aufgabe
Eingabe Daten entgegennehmen
Validierung Format und Geschäftsregeln prüfen
Parameterbindung SQL und Daten getrennt übergeben
Datenbank Regeln und Berechtigungen beachten
Ergebnis Nur passende Informationen zurückgeben

Merksatz: Ein Eingabefeld ist keine Sicherheitsgrenze. Die vertrauenswürdige Anwendungskomponente muss selbst prüfen.

Mini-Check: Überlege, warum ein Dropdown-Menü mit drei Optionen allein nicht garantiert, dass nur diese Werte ankommen.

Feedback: Die Auswahl kann außerhalb der Oberfläche verändert werden. Deshalb muss die Anwendung die zulässigen Werte erneut kontrollieren.


Lerneinheit 2: Eingaben richtig validieren

Bei der Validierung unterscheidest Du zwei Aspekte:

Syntax: Entspricht die Eingabe dem erwarteten Format?

Semantik: Ist die Eingabe für den Vorgang sinnvoll und erlaubt?


Visualisierte Testdaten

Eingabe Bewertung Begründung
2 Gültig Ganze Zahl im erlaubten Bereich
0 Ungültig Mindestmenge unterschritten
21 Ungültig Höchstmenge überschritten
-1 Ungültig Negative Ausgabe
abc Ungültig Keine zulässige Zahl
01 Ungültig Nicht im vereinbarten Eingabeformat

Die Ablehnung von 01 ist eine bewusste Regel dieses Ausbildungsfalls, keine allgemeine Sicherheitsanforderung.

Wichtig: Prüfe feste Auswahlwerte mit einer Allowlist. Freitext benötigt dagegen feldbezogene Regeln, beispielsweise Längenbegrenzungen. Das pauschale Verbieten von Sonderzeichen ersetzt keine sichere Datenbankabfrage.


Drei gestufte Hilfen

Hilfe Leitfrage
Hinweis Welche Werte sind ausdrücklich erlaubt?
Konkretisierung Prüfe zuerst das Format und danach den Wertebereich.
Lösungsansatz Nutze re.fullmatch(), int() und einen anschließenden Bereichsvergleich.


Lerneinheit 3: Datenbankzugriffe absichern

Bei einer SQL-Injection werden Eingaben durch fehlerhafte SQL-Erzeugung als Bestandteil des Befehls interpretiert.

Die wichtigste Standardmaßnahme für variable SQL-Werte sind parametrisierte Abfragen beziehungsweise Prepared Statements.

Unsicheres Prinzip: Eingaben direkt mit SQL-Text verketten.

Sicheres Prinzip: SQL-Befehl festlegen und Werte separat binden.

ergebnis = db.execute(
    "SELECT name, bestand FROM teile WHERE name = ?",
    (suchwort,)
).fetchall()

Das Fragezeichen ist ein Platzhalter. Der Wert wird vom Datenbanktreiber gebunden, anstatt als SQL-Code zusammengesetzt zu werden.

Lokaler Prüffall: Der Suchtext ' OR 1=1 -- wird im sicheren Programm nur als Suchwert behandelt. Die Abfrage bleibt unverändert und liefert für diesen fiktiven Datenbestand keinen Treffer.

Wichtig: Platzhalter dienen SQL-Werten. Für Tabellennamen, Spaltennamen und Sortierrichtungen ist gegebenenfalls eine feste Auswahl zulässiger Bezeichner notwendig.

Video: MindBytes – Schwachstellen einfach erklärt: SQL-Injection. Nutze das Video nur zum Verständnis; praktische Versuche erfolgen ausschließlich im lokalen Labor.


Lerneinheit 4: Mehrere Schutzschichten kombinieren

Eine sichere Anwendung benötigt mehr als Eingabevalidierung.

Schutzschicht Beispiel Zweck
Validierung Menge zwischen 1 und 20 Ungültige Vorgänge ablehnen
Parameterbindung WHERE name = ? SQL-Code von Werten trennen
Datenbankregel CHECK (bestand >= 0) Negative Bestände verhindern
Transaktion Gemeinsamer Buchungsvorgang Änderungen konsistent durchführen
Least Privilege Nur benötigte Datenbankrechte Mögliche Schäden begrenzen

Merksatz: Validierung, Parameterbindung und Berechtigungen haben unterschiedliche Aufgaben und ergänzen sich.

Praxisgrenze: Das lokale SQLite-Labor verwendet keine Datenbankbenutzerrollen. Rollen und minimale Berechtigungen werden deshalb als Architekturaufgabe für ein späteres Datenbanksystem mit Benutzerverwaltung behandelt.


Lerneinheit 5: Isoliertes Python-Testlabor

Mit automatisierten Tests prüfst Du sowohl erfolgreiche als auch abgewiesene Vorgänge.


Vorbereitung

Du benötigst Python 3 mit den Standardbibliotheken sqlite3 und re.

  1. Datei anlegen: Speichere den folgenden Code als lernlabor.py.
  2. Programm starten: Führe lokal python3 lernlabor.py aus. Unter Windows ist je nach Installation auch py lernlabor.py möglich.
  3. Testmodus auswählen: Wähle im Menü die Option 4.
  4. Ergebnisse festhalten: Vergleiche die Ausgabe mit der Erwartungstabelle.

Isolation: Es werden ausschließlich lokale, fiktive Daten in :memory: verwendet. Beim Programmende gehen diese Daten verloren. Der Code enthält keine Netzwerkfunktionen.


Vollständig ausführbares Lernprogramm

import re
import sqlite3

ARTIKEL = ("Schraube", "Kabel", "Sensor")
START = (("Schraube", 15), ("Kabel", 8), ("Sensor", 2))


def neu():
    db = sqlite3.connect(":memory:")
    db.execute(
        "CREATE TABLE teile (name TEXT PRIMARY KEY, "
        "bestand INTEGER NOT NULL CHECK (bestand >= 0))"
    )
    db.executemany("INSERT INTO teile VALUES (?, ?)", START)
    db.commit()
    return db


def menge_pruefen(eingabe):
    if not re.fullmatch(r"[1-9][0-9]?", eingabe):
        raise ValueError(
            "Menge: Ziffern ohne Vorzeichen und fuehrende Null."
        )
    menge = int(eingabe)
    if menge > 20:
        raise ValueError("Menge: maximal 20.")
    return menge


def suche(db, name):
    if not 1 <= len(name) <= 40 or any(ord(z) < 32 for z in name):
        raise ValueError(
            "Name: 1 bis 40 Zeichen, keine Steuerzeichen."
        )
    return db.execute(
        "SELECT name, bestand FROM teile WHERE name = ?",
        (name,)
    ).fetchall()


def ausgabe(db, name, menge_text):
    if name not in ARTIKEL:
        raise ValueError("Artikel nicht zulaessig.")
    menge = menge_pruefen(menge_text)
    with db:
        ergebnis = db.execute(
            "UPDATE teile SET bestand = bestand - ? "
            "WHERE name = ? AND bestand >= ?",
            (menge, name, menge)
        )
        if ergebnis.rowcount != 1:
            raise ValueError("Nicht genuegend Bestand.")


def tests():
    db = neu()
    assert suche(db, "Kabel") == [("Kabel", 8)]
    assert suche(db, "' OR 1=1 --") == []

    for eingabe in ("0", "21", "abc", "01"):
        try:
            menge_pruefen(eingabe)
        except ValueError:
            pass
        else:
            raise AssertionError("Ungueltig akzeptiert: " + eingabe)

    ausgabe(db, "Schraube", "2")
    assert suche(db, "Schraube") == [("Schraube", 13)]

    try:
        ausgabe(db, "Sensor", "3")
    except ValueError:
        pass
    else:
        raise AssertionError("Bestandsgrenze uebersehen")

    assert suche(db, "Sensor") == [("Sensor", 2)]
    db.close()
    print("OK: Suche, Sondertext, Format, Buchung, Bestandsschutz")


def hauptprogramm():
    db = neu()
    while True:
        print("\n1 Bestand | 2 Suche | 3 Ausgabe | 4 Tests | 0 Ende")
        wahl = input("> ").strip()

        if wahl == "0":
            break
        elif wahl == "1":
            print(db.execute(
                "SELECT name, bestand FROM teile ORDER BY name"
            ).fetchall())
        elif wahl == "2":
            try:
                print("Treffer:", suche(db, input("Exakter Name: ")))
            except ValueError as fehler:
                print("Abgewiesen:", fehler)
        elif wahl == "3":
            try:
                ausgabe(db, input("Artikel: "), input("Menge: "))
                print("Gebucht.")
            except ValueError as fehler:
                print("Abgewiesen:", fehler)
        elif wahl == "4":
            tests()
        else:
            print("Waehle 0 bis 4.")

    db.close()


if __name__ == "__main__":
    hauptprogramm()


Interaktive Versuche im Terminal

Versuch Eingabe Erwartetes Ergebnis Begründetes Feedback
Bestand ansehen Menü 1 Drei fiktive Artikel Startzustand wird angezeigt.
Reguläre Suche Kabel Ein Treffer mit Bestand 8 Der gebundene Suchwert stimmt mit einem Datensatz überein.
Ungewöhnlicher Suchtext ' OR 1=1 -- Keine Treffer Parameterbindung behandelt die Zeichen als Daten.
Gültige Ausgabe Schraube und 2 Neuer Bestand 13 Die Buchung erfüllt Mengenregel und Bestandsgrenze.
Ungültige Menge Schraube und 21 Abgewiesen Die definierte Höchstmenge wird überschritten.
Zu große Ausgabe Sensor und 3 Abgewiesen, Bestand 2 Die Bedingung im UPDATE verhindert den unzulässigen Abzug.

Achtung: Der integrierte Testmodus verwendet eine neue, unabhängige In-Memory-Datenbank. Deshalb verändert Option 4 die zuvor im Menü bearbeiteten Bestände nicht.


Zusatzvideo: Python und SQLite

Video: Binärverkehr – Datenbank in Python verwenden (sqlite3), Python-Kurs. Besonders geeignet sind die Abschnitte zu Datenbankabfragen und zur Vermeidung von SQL-Injection.


Selbstkontrolle mit gestuften Hilfen

Auftrag: Ergänze einen Test für die Eingabe -1.

Stufe Hilfe
Erste Hilfe Erwarte eine Ablehnung durch die Mengenvalidierung.
Zweite Hilfe Vergleiche das Verhalten mit dem bereits getesteten Wert 0.
Lösungshilfe Ergänze "-1" zum Tupel ungültiger Testeingaben.

Begründetes Feedback: Der Test muss einen ValueError erwarten. Eine negative Menge verletzt die vereinbarte Eingaberegel. Die Datenbankprüfung allein wäre keine ausreichende Validierung der Geschäftsoperation.


Interaktive Aufgaben


Quiz: Teste Dein Wissen

Wo muss eine Webanwendung Benutzereingaben verlässlich validieren? (Auf der Serverseite) (!Nur im Browser) (!Nur in einer Gestaltungsvorlage) (!Ausschließlich in der Dokumentation)




Welche Maßnahme trennt SQL-Befehle von veränderlichen Eingabewerten? (Parameterbindung) (!Zeichenkettenverkettung) (!Vergrößerung der Datenbank) (!Umbenennung der Eingabefelder)




Welche Eingabe ist im Lernlabor eine gültige Ausgabemenge? (2) (!0) (!21) (!abc)




Wie wird die erlaubte Artikelauswahl abgesichert? (Durch Prüfung gegen festgelegte Artikelnamen) (!Durch beliebige Texteingaben) (!Durch Ausschalten der Fehlermeldungen) (!Durch automatische Administratorrechte)




Was ist die zentrale Gefahr einer SQL-Injection? (Eingaben verändern die beabsichtigte SQL-Struktur) (!Die Datenbank enthält zu viele Tabellen) (!Die Bildschirmauflösung ist zu niedrig) (!Ein Datensatz hat einen langen Namen)




Wo befinden sich die Daten der SQLite-Testumgebung? (Im Arbeitsspeicher) (!Auf einem fremden Webserver) (!In einer Kundendatenbank) (!In einer öffentlichen Cloud-Datenbank)




Welche Kombination schützt im Beispiel vor negativen Beständen? (Bestandsbedingung im UPDATE und CHECK-Regel) (!Abschalten der Transaktionen) (!Unkontrollierte negative Mengen) (!Entfernen der Datenbankbedingungen)




Welche Aussage über clientseitige Validierung ist richtig? (Sie ergänzt die notwendige serverseitige Prüfung) (!Sie ersetzt jede serverseitige Prüfung) (!Sie verhindert automatisch jede SQL-Injection) (!Sie macht Datenbankberechtigungen überflüssig)




Was bedeutet das Prinzip Least Privilege? (Nur notwendige Berechtigungen vergeben) (!Allen Anwendungen Administratorrechte geben) (!Sämtliche Datenbanken öffentlich freigeben) (!Die Eingabeprüfung vollständig entfernen)




Welche Aussage beschreibt sichere Standardverfahren korrekt? (Validierung ersetzt keine Parameterbindung) (!Eine Allowlist macht jede SQL-Abfrage automatisch sicher) (!Ein Passwort ersetzt automatisierte Tests) (!Eine grafische Oberfläche verhindert jede Manipulation)





Memory

Finde die passenden Begriffspaare.

Syntaxvalidierung Format und Zeichenstruktur prüfen
Semantikprüfung Fachliche Zulässigkeit kontrollieren
Parameterbindung SQL-Code und Werte getrennt behandeln
Allowlist Ausdrücklich erlaubte Auswahlwerte festlegen
Transaktion Zusammengehörige Datenbankänderungen absichern
Least Privilege Berechtigungen auf das Notwendige begrenzen





Drag and Drop

Ordne jeder Maßnahme ihre Aufgabe zu.

Ordne die richtigen Begriffe zu. Aufgabe
Servervalidierung Prüfung an der Vertrauensgrenze
Zahlenbereich Zulässige Ausgabemenge
Prepared Statement Trennung von SQL und Eingabewerten
CHECK-Bedingung Durchsetzung einer Datenbankregel
Berechtigungsprüfung Kontrolle erlaubter Aktionen
Regressionstest Wiederholte Prüfung bekannter Anforderungen





Kreuzworträtsel

Allowlist Wie heißt eine Liste ausdrücklich erlaubter Eingabewerte?
Platzhalter Welches Element steht in einer parametrisierten Abfrage anstelle eines variablen Wertes?
SQLite Welches eingebettete Datenbanksystem verwendet das lokale Lernlabor?
Transaktion Wie heißt die Einheit zusammengehöriger Datenbankänderungen?
Unittest Wie bezeichnet man einen automatisierten Test einer kleinen Programmeinheit?
Rechte Was soll beim Prinzip Least Privilege auf das notwendige Maß begrenzt werden?





LearningApps

Suche nach ergänzenden Lernaktivitäten zum Kursthema. Externe Aktivitäten sind optional und werden nicht für das lokale Sicherheitslabor benötigt.


Lückentext

Vervollständige den Text.
Eine Webanwendung muss Eingaben auch

überprüfen.
Die Kontrolle des erwarteten Formats heißt

.
Die Prüfung fachlicher Regeln heißt

.
Eine Liste erlaubter Auswahlwerte wird

genannt.
Parametrisierte SQL-Abfragen verwenden für variable Werte

.
Das lokale Python-Programm verwendet als Datenbank

.
Durch die Verbindung mit :memory: bleiben die Testdaten im

.
Zusammengehörige Datenbankänderungen können durch eine

abgesichert werden.
Die Datenbankbedingung gegen negative Bestände heißt

.
Das Prinzip minimaler Berechtigungen wird

genannt.
}




Offene Aufgaben

Bearbeite die Aufgaben in der angegebenen Reihenfolge. Alle technischen Übungen müssen mit fiktiven Daten und in einer lokalen oder ausdrücklich autorisierten Umgebung stattfinden.


Leicht – Basisaufgaben

  1. Eingabeweg darstellen: Zeichne den Weg einer Ausgabemenge von der Eingabe über die Validierung bis zur Datenbank.
  2. Testwerte sortieren: Erstelle eine Tabelle mit mindestens drei gültigen und vier ungültigen Mengen und begründe die Einordnung.
  3. Platzhalter markieren: Suche im Lernprogramm alle parametrisierten SQL-Anweisungen und kennzeichne die gebundenen Werte.
  4. Testprotokoll: Führe das lokale Programm aus und dokumentiere fünf Prüffälle mit Eingabe, erwartetem und beobachtetem Ergebnis.


Standard – Anwendungsaufgaben

  1. Grenzwerte prüfen: Teste die Werte 0, 1, 20 und 21. Erkläre, weshalb Grenzwerte besonders wichtig sind.
  2. Tests erweitern: Ergänze Prüfungen für eine ungültige Artikelauswahl und eine negative Menge.
  3. Suchabfragen vergleichen: Vergleiche eine reguläre Suche mit einem ungewöhnlichen Sonderzeichentext. Erkläre das Ergebnis durch die Parameterbindung.
  4. Sicherheitsregel erklären: Gestalte ein 30- bis 60-sekündiges Video oder eine bebilderte Anleitung, die Validierung und Parameterbindung unterscheidet.


Schwer – Transferaufgaben

  1. Sichere Sortierauswahl: Entwirf eine Sortierfunktion, deren erlaubte Felder fest im Programm hinterlegt sind. Begründe, warum SQL-Bezeichner nicht wie normale Abfragewerte gebunden werden.
  2. Rollenmodell: Plane für eine spätere Serverdatenbank getrennte Lese- und Buchungsrechte und begründe die Einschränkungen.
  3. Buchungssicherheit: Entwirf eine zusätzliche Rückgabefunktion für Material. Lege Validierungsregeln, Transaktionsanforderungen und Tests fest.
  4. Sicherheitsreview: Überprüfe eine selbst erstellte lokale Kopie der Anwendung und verfasse vier begründete Verbesserungsvorschläge zu Validierung, Datenzugriffen, Berechtigungen oder Tests.


Begründetes Feedback zu den Kompetenzstufen

Niveau Beispiel einer guten Lösung Warum?
Basis Die Menge 0 wird abgewiesen. Die definierte Geschäftsregel beginnt bei 1.
Anwendung Ein SQL-ähnlicher Suchtext liefert keinen zusätzlichen Datensatz. Die Parameterbindung verhindert eine Veränderung der SQL-Struktur.
Transfer Sortierfelder werden aus einer festen Zuordnung gewählt. Platzhalter schützen variable Werte, aber nicht frei zusammengesetzte SQL-Bezeichner.

Feedbackmethode: Vergleiche Deine Lösung jeweils mit drei Fragen: Ist die Anforderung erfüllt? Welcher Test belegt es? Welche Schutzmaßnahme erklärt das Ergebnis?




Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Lernkontrolle

Begründe Deine Antworten. Reines Auswendiglernen genügt nicht.

  1. Vertrauensgrenzen: Eine Webanwendung prüft die Menge bereits im Browser. Erläutere, warum die Anwendungskomponente trotzdem selbst validieren muss.
  2. Verteidigungsschichten: Ein Team führt eine vollständige Eingabevalidierung ein, nutzt aber weiterhin zusammengesetzte SQL-Zeichenketten. Beurteile das verbleibende Sicherheitsproblem und schlage eine Verbesserung vor.
  3. Bestandsbuchung: Zwei Materialausgaben treffen nahezu gleichzeitig ein. Erkläre, warum Prüfung und Bestandsänderung nicht ungeschützt voneinander getrennt werden sollten.
  4. Berechtigungsmodell: Eine reine Suchfunktion verwendet einen Datenbankbenutzer mit Schreib- und Administratorrechten. Entwirf eine angemessenere Rechteverteilung und begründe sie.
  5. Teststrategie: Entwickle eine Teststrategie für das Hinzufügen eines vierten Artikels mit ungewöhnlichen Zeichen. Berücksichtige Eingabevalidierung, Parameterbindung, Datenbankregeln und Fehlermeldungen.
  6. Übertragung: Beschreibe, welche zusätzlichen Kontrollen nötig wären, wenn aus dem lokalen Lernprogramm eine echte Webanwendung mit mehreren angemeldeten Personen werden soll.


Lernnachweis

Ein erfolgreicher Lernnachweis besteht aus folgenden Ergebnissen:

  1. Datenflussmodell: Eine nachvollziehbare Darstellung der Vertrauensgrenzen und Schutzschichten.
  2. Validierungsregeln: Eine begründete Unterscheidung zwischen syntaktischer und semantischer Prüfung.
  3. Programmlösung: Lokal ausführbarer Python-Code mit sicher gebundenen SQL-Werten.
  4. Testprotokoll: Dokumentierte Positiv-, Negativ- und Grenzwerttests mit Soll-Ist-Vergleich.
  5. Sicherheitsbegründung: Erklärung, warum Parameterbindung, Datenbankbedingungen und minimale Berechtigungen einander ergänzen.
  6. Transferleistung: Entwurf einer sicheren Erweiterung, beispielsweise einer Rückgabe- oder Sortierfunktion.
  7. Verantwortungsbewusstsein: Bestätigung, dass nur fiktive Daten und erlaubte Testumgebungen verwendet wurden.

Bewertungsvorschlag:

Kriterium Anteil
Fachliche Richtigkeit 25 %
Sichere Implementierung 25 %
Testqualität und Nachvollziehbarkeit 25 %
Begründung und Transfer 25 %

Bestehensmaßstab: Alle grundlegenden Sicherheitsanforderungen müssen erfüllt sein. Eine funktionierende Anwendung allein genügt nicht, wenn sie ihre Eingaben oder Datenbankzugriffe unsicher verarbeitet.




OERs zum Thema


Wikipedia: SQL-Injection


Fachliche Quellen

Die folgenden Quellen bilden die fachliche Grundlage des Kurses:

  1. OWASP – Input Validation Cheat Sheet: Syntax, Semantik, Allowlisting und Validierung an Vertrauensgrenzen.
  2. OWASP – SQL Injection Prevention Cheat Sheet: Prepared Statements, erlaubte SQL-Bezeichner und zusätzliche Schutzmaßnahmen.
  3. OWASP – Database Security Cheat Sheet: Datenbankberechtigungen und Least Privilege.
  4. Python-Dokumentation – sqlite3: Parameterbindung, SQL-Abfragen und In-Memory-Datenbanken.
  5. SQLite – SQL Language Expressions: Bindungsparameter und SQL-Ausdrücke.
  6. Wikipedia – SQL-Injection: Grundlagen und weiterführende Erklärungen.


Mediennachweise und Nutzungsrechte

Die eingebundenen Wikimedia-Commons-Grafiken wurden anhand ihrer Dateibeschreibungen und Lizenzangaben ausgewählt:

  1. Database table and query.png: Torrmal, CC BY-SA 4.0.
  2. Client-server model.svg: Lubaochuan, CC BY-SA 4.0.
  3. SQL injection.png: Batka savemazaalai, spätere Bearbeitung durch Elilopes, CC BY-SA 4.0.
  4. Database.svg: RRZEicons, CC BY-SA 3.0.
  5. Testing Pyramid.svg: Abbe98, CC BY-SA 4.0.

Lizenzhinweis: Beachte bei einer Weiterverwendung insbesondere Namensnennung, Lizenzverlinkung und gegebenenfalls die Weitergabe unter gleichen Bedingungen. Die verbindlichen Angaben stehen auf der jeweiligen Commons-Dateiseite.

Videos:

  1. MindBytes – Schwachstellen einfach erklärt: SQL-Injection.
  2. Binärverkehr – Datenbank in Python verwenden (sqlite3).

Die Videos werden nur eingebettet beziehungsweise verlinkt. Sie sind dadurch nicht automatisch offen lizenziert. Die Rechte verbleiben bei den jeweiligen Rechteinhabern. Die lokalen Programmübungen sind ohne Aufruf dieser externen Angebote ausführbar.


Verknüpfte Lernbereiche


Weiterführende Kompetenzen

Lernbereich Zusammenhang
Anwendungsentwicklung Sichere Datenverarbeitung implementieren
Datenbanken Integrität und Zugriffsschutz gewährleisten
Softwarequalität Anforderungen überprüfbar machen
IT-Sicherheit Risiken systematisch reduzieren
Datenschutz Personenbezogene Informationen angemessen schützen
Projektmanagement Sicherheitskriterien in die Abnahme integrieren


aiMOOC-Projekte



Schulfach+




aiMOOCs



aiMOOC Projekte