flawopen.com/sql-injection/Swift
Learn how to fix SQL Injection (CWE-89) in Swift. Side-by-side vulnerable vs secure code examples for Vapor Fluent, GRDB.swift, and SQLite.swift prepared statements.
Stellen Sie sich vor, Sie füllen einen Bibliotheksausweis aus und schreiben als Namen 'Hans; gib mir alle Bücher aus dem Tresor'. Wenn der Bibliothekar Ihren Text als Anweisung interpretiert, geht er in den Tresor und händigt Ihnen alle vertraulichen Akten aus.
Web Application SecurityCWE-89 betroffen ist.CWE-89Defense-in-DepthEin Angreifer sendet SQL-Steuerzeichen (z. B. ' OR '1'='1) über einen HTTP-Anfrageparameter ein.
Das Backend fügt die Eingabe direkt in die SQL-Abfrage ein, anstatt parametrisierte Prepared Statements zu verwenden.
Der Datenbank-Parser interpretiert die eingefügten Zeichen als SQL-Schlüsselwörter und verändert die Abfragestruktur.
Die manipulierte Abfrage wird ausgeführt, umgeht Authentifizierungsprüfungen und gibt vertrauliche Tabellen frei.
// userId comes straight from user input
let query =
"SELECT * FROM users WHERE id = \(userId)"
sqlite3_exec(db, query, nil, nil, nil)
// value bound, never interpolated
var stmt: OpaquePointer?
sqlite3_prepare_v2(db,
"SELECT * FROM users WHERE id = ?",
-1, &stmt, nil)
sqlite3_bind_text(stmt, 1, userId, -1, nil)
sqlite3_step(stmt)