flawopen.com/SQL-Injection in JavaScript/TypeORM
Ist TypeORM QueryBuilder vor SQL-Injection sicher?
Ein gebundener Parameter ist wie ein beschriftetes Wertfeld: TypeORM sendet den Wert separat, sodass er Daten und keine SQL-Anweisung bleibt. QueryBuilder bindet getrennt übergebene benannte Parameter. Interpolierte Eingaben in der Bedingung werden wieder zu SQL-Text.
userRepo.createQueryBuilder("u")
.where(`u.id = ${userId}`)
.getOne()
userRepo.createQueryBuilder("u")
.where("u.id = :id", { id: userId })
.getOne()
Werte binden; Abfragestruktur begrenzen
QueryBuilder.where() akzeptiert eine Bedingung mit benannten Platzhaltern wie :id und ein separates Parameterobjekt. Verwende für verschiedene Werte unterschiedliche Namen; TypeORM warnt, dass wiederverwendete Namen überschrieben werden können. Interpoliere keine Nutzereingabe in die Bedingung. Raw-Methoden wie dataSource.query() unterstützen auch treiberspezifische Platzhalter mit separat übergebenen Werten. Parameter binden Daten, keine Tabellen- oder Spaltennamen, Sortierrichtungen oder beliebiges SQL. Ordne auswählbare Struktur festen, anwendungseigenen Ausdrücken zu.
TypeORM-Abfragen prüfen
rg -n '(\.where\(|\.query\(|\.sql)' --glob '*.ts' .FAQ
Übliche find-Optionen leiten Werte durch TypeORM-Abfragekonstruktion; prüfe dennoch benutzerdefinierte Operatoren, Raw-SQL-Ausdrücke und von der Anwendung zusammengesetzte Strings. Parametrisierung verhindert Syntax-Injection, autorisiert aber keinen Datensatz und validiert keine fachliche Bedeutung.
Quellen
- TypeORM-Dokumentation — DataSource-Raw-Abfragen und Parameter
- OWASP — Schutz vor SQL-Injection
- TypeORM-Dokumentation — Select QueryBuilder und Parameter
- flawopen.com — SQL-Injection in JavaScript