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.
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.
