FlawOpen

flawopen.com/SQL-Injection in JavaScript/TypeORM

Ist TypeORM QueryBuilder vor SQL-Injection sicher?

Referenzleitfaden
Kurzantwort

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.

UNSICHER — Eingabe in SQL interpolieren
userRepo.createQueryBuilder("u")
  .where(`u.id = ${userId}`)
  .getOne()
ABGESICHERT — Wert separat binden
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

Sind TypeORM-Repository-find-Methoden immer sicher?

Ü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

Siehe auch SQL-Injection (CWE-89): Funktionsweise und Schutz in jeder Sprache — flawopen.com Django ORM und SQL Injection: sichere Muster Doctrine ORM: SQL-Injection vermeiden EF Core FromSqlRaw: Sicheres SQL mit Parametern FastAPI SQL Injection: Was Pydantic verhindert GORM Raw SQL: SQL-Injection in Go verhindern Reicht das Escapen von Anführungszeichen gegen SQL Injection?