FlawOpen

flawopen.com/Injection SQL en JavaScript/TypeORM

Le QueryBuilder TypeORM protège-t-il contre les injections SQL ?

Guide de référence
Réponse courte

Un paramètre lié ressemble à un champ étiqueté sur un formulaire : TypeORM transmet la valeur séparément, comme une donnée et non une instruction SQL. QueryBuilder lie les paramètres nommés transmis séparément. Interpoler une entrée dans la condition la transforme de nouveau en texte SQL.

NON SÛR — interpoler l’entrée dans SQL
userRepo.createQueryBuilder("u")
  .where(`u.id = ${userId}`)
  .getOne()
RENFORCÉ — lier la valeur séparément
userRepo.createQueryBuilder("u")
  .where("u.id = :id", { id: userId })
  .getOne()

Lier les valeurs ; contrôler la structure de la requête

QueryBuilder.where() accepte une condition avec des placeholders nommés, comme :id, et un objet de paramètres séparé. Utilisez des noms distincts pour des valeurs distinctes ; TypeORM avertit qu’un nom réutilisé peut écraser sa valeur. N’interpolez pas l’entrée utilisateur dans la condition. Les méthodes raw comme dataSource.query() acceptent aussi des placeholders propres au pilote avec les valeurs séparées. Les paramètres lient des données, pas les noms de tables ou colonnes, l’ordre de tri ni du SQL arbitraire. Associez la structure sélectionnable à des expressions fixes de l’application.

Auditer la construction des requêtes

rg -n '(\.where\(|\.query\(|\.sql)' --glob '*.ts' .

FAQ

Les méthodes find de Repository TypeORM sont-elles toujours sûres ?

Les options find courantes transmettent les valeurs via la construction des requêtes TypeORM ; vérifiez toutefois les opérateurs personnalisés, expressions SQL brutes et chaînes assemblées par l’application. Le paramétrage prévient l’injection syntaxique, pas l’accès non autorisé ni les erreurs de validation métier.

Références

À voir aussi Injection SQL (CWE-89) : fonctionnement et prévention dans chaque langage — flawopen.com Django ORM et SQL Injection : bonnes pratiques Injection SQL dans Doctrine ORM : requêtes sûres EF Core FromSqlRaw : SQL paramétré sûr FastAPI et SQL Injection : limites de Pydantic GORM Raw SQL : éviter l’injection SQL en Go Échapper les guillemets suffit-il contre SQL Injection ?