FlawOpen

flawopen.com/Injection SQL en JavaScript/Sequelize

Sequelize query() protège-t-il contre les injections SQL ?

Guide de référence
Réponse courte

Un paramètre ressemble à une fiche de valeur scellée : SQL reçoit la valeur séparément des instructions. Dans Sequelize v6, bind transmet les valeurs à part ; replacements les échappe et les insère avant l’envoi. Construire la chaîne avec une entrée non fiable contourne les deux. Aucun ne remplace les noms de tables ou colonnes.

NON SÛR — concaténer l’entrée dans SQL
sequelize.query(
  `SELECT * FROM users WHERE id = ${userId}`
)
RENFORCÉ — lier la valeur séparément
sequelize.query(
  "SELECT id FROM users WHERE id = $id",
  { bind: { id: userId },
    type: QueryTypes.SELECT }
)

Garder les valeurs hors de la syntaxe SQL

Dans Sequelize v6, Sequelize échappe et insère replacements avant l’envoi de la requête à la base ; bind transmet les valeurs séparément du texte SQL. Les deux évitent de concaténer des valeurs utilisateur, mais la syntaxe dépend de la méthode et du dialecte. Les paramètres ne représentent ni noms de tables ou colonnes, ni tri, ni fragments SQL. Associez la structure sélectionnable à une allowlist fixe de l’application. Les méthodes de modèle peuvent paramétrer les valeurs structurées courantes, mais le SQL raw et les expressions littérales doivent aussi être vérifiés.

Auditer les requêtes Sequelize

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

FAQ

Les méthodes de modèle Sequelize sont-elles toujours sûres contre les injections SQL ?

Les valeurs structurées ordinaires sont traitées par la construction de requêtes Sequelize. Vérifiez néanmoins le SQL raw, les expressions littérales et les chaînes assemblées par l’application. Le paramétrage n’autorise pas l’accès aux enregistrements et ne valide pas les règles métier.

Références

À voir aussi Injection SQL (CWE-89) : fonctionnement et prévention dans chaque langage — flawopen.com SQLAlchemy text() protège-t-il contre les injections SQL ? La vérification des requêtes sqlx à la compilation empêche-t-elle les injections SQL ? Les procédures stockées empêchent-elles l’injection SQL ? TypeORM QueryBuilder protège-t-il des injections SQL ? Django ORM et SQL Injection : bonnes pratiques Injection SQL dans Doctrine ORM : requêtes sûres