FlawOpen

flawopen.com/SQL-Injection in JavaScript/Sequelize

Ist Sequelize query() vor SQL-Injection sicher?

Referenzleitfaden
Kurzantwort

Ein Parameter ist wie eine versiegelte Wertkarte: SQL erhält den Wert getrennt von den Anweisungen. In Sequelize v6 sendet bind Werte separat; replacements maskiert und setzt sie vor dem Senden ein. Ein String mit nicht vertrauenswürdiger Eingabe umgeht beides. Keines ersetzt Tabellen- oder Spaltennamen.

UNSICHER — Eingabe in SQL verketten
sequelize.query(
  `SELECT * FROM users WHERE id = ${userId}`
)
ABGESICHERT — Wert separat binden
sequelize.query(
  "SELECT id FROM users WHERE id = $id",
  { bind: { id: userId },
    type: QueryTypes.SELECT }
)

Werte von SQL-Syntax getrennt halten

In Sequelize v6 maskiert und setzt Sequelize replacements ein, bevor die Abfrage die Datenbank erreicht; bind sendet Werte getrennt vom SQL-Text. Beides vermeidet die Verkettung von Nutzereingaben, doch die Syntax unterscheidet sich je nach Methode und Dialekt. Parameter stehen nicht für Tabellen- oder Spaltennamen, Sortierrichtungen oder beliebiges SQL. Ordne auswählbare Strukturen einer festen, anwendungseigenen Allowlist zu. Modellmethoden können übliche strukturierte Werte parametrisieren; Raw-SQL und literale Ausdrücke müssen trotzdem geprüft werden.

Sequelize-Abfragen prüfen

rg -n 'sequelize\.query\(|Sequelize\.literal\(' --glob '*.{js,ts,mjs,cjs}' .

FAQ

Sind Sequelize-Modellmethoden immer vor SQL-Injection sicher?

Übliche strukturierte Werte werden von der Sequelize-Abfragekonstruktion verarbeitet. Prüfe dennoch Raw-SQL, literale Ausdrücke und von der Anwendung zusammengesetzte Strings. Parametrisierung autorisiert keinen Datensatz und validiert keine Fachregeln.

Quellen

Siehe auch SQL-Injection (CWE-89): Funktionsweise und Schutz in jeder Sprache — flawopen.com Ist SQLAlchemy text() vor SQL-Injection sicher? Verhindert sqlx-Abfrageprüfung zur Kompilierzeit SQL-Injection? Schützen gespeicherte Prozeduren vor SQL-Injection? Ist TypeORM QueryBuilder vor SQL-Injection sicher? Django ORM und SQL Injection: sichere Muster Doctrine ORM: SQL-Injection vermeiden