Anwendungsentwicklung und Softwarequalität – Eingaben und Datenbankzugriffe absichern
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:
- Mengenvalidierung: Eine Ausgabe muss eine ganze Zahl zwischen 1 und 20 sein.
- Artikelauswahl: Nur Schraube, Kabel und Sensor können ausgegeben werden.
- Bestandsschutz: Eine Ausgabe darf den Bestand nicht negativ machen.
- 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.
- Datei anlegen: Speichere den folgenden Code als
lernlabor.py. - Programm starten: Führe lokal
python3 lernlabor.pyaus. Unter Windows ist je nach Installation auchpy lernlabor.pymöglich. - Testmodus auswählen: Wähle im Menü die Option 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
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
- Eingabeweg darstellen: Zeichne den Weg einer Ausgabemenge von der Eingabe über die Validierung bis zur Datenbank.
- Testwerte sortieren: Erstelle eine Tabelle mit mindestens drei gültigen und vier ungültigen Mengen und begründe die Einordnung.
- Platzhalter markieren: Suche im Lernprogramm alle parametrisierten SQL-Anweisungen und kennzeichne die gebundenen Werte.
- Testprotokoll: Führe das lokale Programm aus und dokumentiere fünf Prüffälle mit Eingabe, erwartetem und beobachtetem Ergebnis.
Standard – Anwendungsaufgaben
- Grenzwerte prüfen: Teste die Werte 0, 1, 20 und 21. Erkläre, weshalb Grenzwerte besonders wichtig sind.
- Tests erweitern: Ergänze Prüfungen für eine ungültige Artikelauswahl und eine negative Menge.
- Suchabfragen vergleichen: Vergleiche eine reguläre Suche mit einem ungewöhnlichen Sonderzeichentext. Erkläre das Ergebnis durch die Parameterbindung.
- Sicherheitsregel erklären: Gestalte ein 30- bis 60-sekündiges Video oder eine bebilderte Anleitung, die Validierung und Parameterbindung unterscheidet.
Schwer – Transferaufgaben
- Sichere Sortierauswahl: Entwirf eine Sortierfunktion, deren erlaubte Felder fest im Programm hinterlegt sind. Begründe, warum SQL-Bezeichner nicht wie normale Abfragewerte gebunden werden.
- Rollenmodell: Plane für eine spätere Serverdatenbank getrennte Lese- und Buchungsrechte und begründe die Einschränkungen.
- Buchungssicherheit: Entwirf eine zusätzliche Rückgabefunktion für Material. Lege Validierungsregeln, Transaktionsanforderungen und Tests fest.
- 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?


Lernkontrolle
Begründe Deine Antworten. Reines Auswendiglernen genügt nicht.
- Vertrauensgrenzen: Eine Webanwendung prüft die Menge bereits im Browser. Erläutere, warum die Anwendungskomponente trotzdem selbst validieren muss.
- 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.
- Bestandsbuchung: Zwei Materialausgaben treffen nahezu gleichzeitig ein. Erkläre, warum Prüfung und Bestandsänderung nicht ungeschützt voneinander getrennt werden sollten.
- Berechtigungsmodell: Eine reine Suchfunktion verwendet einen Datenbankbenutzer mit Schreib- und Administratorrechten. Entwirf eine angemessenere Rechteverteilung und begründe sie.
- Teststrategie: Entwickle eine Teststrategie für das Hinzufügen eines vierten Artikels mit ungewöhnlichen Zeichen. Berücksichtige Eingabevalidierung, Parameterbindung, Datenbankregeln und Fehlermeldungen.
- Ü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:
- Datenflussmodell: Eine nachvollziehbare Darstellung der Vertrauensgrenzen und Schutzschichten.
- Validierungsregeln: Eine begründete Unterscheidung zwischen syntaktischer und semantischer Prüfung.
- Programmlösung: Lokal ausführbarer Python-Code mit sicher gebundenen SQL-Werten.
- Testprotokoll: Dokumentierte Positiv-, Negativ- und Grenzwerttests mit Soll-Ist-Vergleich.
- Sicherheitsbegründung: Erklärung, warum Parameterbindung, Datenbankbedingungen und minimale Berechtigungen einander ergänzen.
- Transferleistung: Entwurf einer sicheren Erweiterung, beispielsweise einer Rückgabe- oder Sortierfunktion.
- 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:
- OWASP – Input Validation Cheat Sheet: Syntax, Semantik, Allowlisting und Validierung an Vertrauensgrenzen.
- OWASP – SQL Injection Prevention Cheat Sheet: Prepared Statements, erlaubte SQL-Bezeichner und zusätzliche Schutzmaßnahmen.
- OWASP – Database Security Cheat Sheet: Datenbankberechtigungen und Least Privilege.
- Python-Dokumentation – sqlite3: Parameterbindung, SQL-Abfragen und In-Memory-Datenbanken.
- SQLite – SQL Language Expressions: Bindungsparameter und SQL-Ausdrücke.
- 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:
- Database table and query.png: Torrmal, CC BY-SA 4.0.
- Client-server model.svg: Lubaochuan, CC BY-SA 4.0.
- SQL injection.png: Batka savemazaalai, spätere Bearbeitung durch Elilopes, CC BY-SA 4.0.
- Database.svg: RRZEicons, CC BY-SA 3.0.
- 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:
- MindBytes – Schwachstellen einfach erklärt: SQL-Injection.
- 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


NEWSLernweltNOAH fragen