Datenbanken - 3. Semester (Fach) / Prepared Statements und SQL-Injection (Lektion)

In dieser Lektion befinden sich 9 Karteikarten

Prepared Statements und SQL-Injection

Diese Lektion wurde von zrah erstellt.

Lektion lernen

Diese Lektion ist leider nicht zum lernen freigegeben.

  • Welche Phasen durchläuft ein SQL-Statement bei seiner Ausführung? parse/prepare (Variablen übergeben), execute (Variablen abholen) und fetch
  • Wie heißen die Schritte, in denen die Variablen an ein erzeugtes Statement übergeben werden? mysqli_stmt_bind_param($stmt, "s", $city); // s = string   (#2 Procedural style)$stmt->bindParam(':user', $user, [TYP]); // ':user' = Platzhalter   (#1 Object oriented style)
  • Für welche Schritte gibt es bei PDO keine eigenen Funktions(Methoden)-Aufrufe im Gegensatz zu mysqli? prepare (bei prepared statements)
  • SQL-Injection ist möglich, weil ein einfaches oder doppeltes Hochkomma bei der Zusammenstellung einer Datenbankanfrage 3 Bedeutungen haben kann. Welche 3 sind dies? > ' String-Delimiter PHP> ' String-Delimer SQL> ' einfaches Hochkomma wie z.B. in Sarah O' Connor
  • Kann mit mysqli_query mehr als ein Statement übergeben werden? Nein, in der Normalkonfiguration nicht, PDO allerdings schon.
  • Was ist eine gängige Vorgangsweise um die where-Klausel so zu manipulieren, das automatisch alle Sätze einer Tabelle zurückgeliefert werden? > Universaloperator: SELECT * FROM users WHERE id=5> Manipulation: SELECT FROM users WHERE id= 5 OR 1=1
  • Wo ist es am einfachsten die zurückgeschickten Datenbankparameter zu manipulieren? Über Zugriff auf die query-Variable in PHP?
  • Mit welchem SQL-Konstrukt wird versucht Treffer aus einer ursprünglich nicht ausgelesenen Tabelle zu erhalten? SELECT username FROM users WHERE id=1 UNION SELECT nickname FROM customer; The SQL UNION operator combines the result of two or more SELECT statements.
  • Mit welchen SQL-Konstrukten versucht man Spaltennamen über entsprechende Fehlermeldungen auszuspähen? SELECT users_id, user_name FROM users WHERE users_id = 1 HAVING 1=1; Parser ignoriert die sinnlose Eingabe "having 1=1", die ohne GROUP BY keinen Sinn macht. Attacke daher nicht möglich. Bei anderen Datenbanken kommen Fehlermeldungen, die teilweise Rückschlüsse auf die Spaltennamen zulassen.